【发布时间】:2019-07-29 12:04:09
【问题描述】:
我正在 Keras 中构建一个带有 Tensorflow 后端的 CNN,我想介绍一个自定义层,它应该执行以下操作:
- 输出与输入张量具有相同形状和 dtype 的张量。
- 输出由输入张量的几个样本组成,比如说 25%。输出张量的其余部分应为零。
- 必须随机选取样本,以更高的概率采样最高值像素。换句话说,概率分布应该是输入张量本身(归一化)。
目前,我已经设法构建了一个模型,在该模型中我选择了输入张量的前 25% 像素,并仅从它们中创建了一个相同大小的输出张量。但这不是随机抽样。
理想情况下,我想使用相当于 :np.random.choice(input_tensor, num_samples, input_tensor_normalized) 的张量流,其中第三个参数是要遵循的概率分布。请注意,这只适用于 1D np.array。
我听说过tf.random.multinomial,但它已经贬值了,tf.random.categorical 将logits 作为输入(我不认为这是我的情况)并且没有提出概率分布。
一种可能性是将输入张量重塑为一个向量,如果有办法在 Tensorflow 中执行一维采样,构造一个相似的向量,其对应索引处的采样值和其他位置为零,然后再整形为张量。
还有什么想法吗?
我应该迁移到 PyTorch 吗?
非常感谢
【问题讨论】:
-
这里有一个完整的 Keras 示例:stackoverflow.com/a/67123900/10375049
标签: python tensorflow keras pytorch sampling