如何在Keras Tensorflow中为采样创建自定义图层?

问题描述 投票:1回答:1

我正在Keras中使用Tensorflow后端构建CNN,我想介绍一个应该执行以下操作的自定义层:

  • 输出与输入张量相同的形状和dtype的张量。
  • 输出由输入张量的几个样本组成,比如说25%。输出张量的其余部分应为零。
  • 必须随机拾取样本,以便以更高的概率对最高值像素进行采样。换句话说,概率分布应该是输入张量本身(标准化)。

现在,我已经设法构建了一个模型,我在其中选择输入张量的前25%像素并仅从它们创建相同大小的输出张量。但它不是随机抽样。

理想情况下,我想使用张量等价的:np.random.choice(input_tensor, num_samples, input_tensor_normalized),其中第三个参数是要遵循的概率分布。请注意,这仅适用于1D np.array。

我听说过tf.random.multinomial,但它已经贬值了,tf.random.categoricallogits作为输入(我不认为这是我的情况)并且不提出概率分布。

一种可能性是将输入张量重新整形为矢量,如果有方法则在Tensorflow中执行1D采样,在相应的索引处构造具有采样值的类似矢量,在其他地方构造零,然后再重塑为张量。

还有其他想法吗?

我应该搬到PyTorch吗?

非常感谢你

python tensorflow keras pytorch sampling
1个回答
0
投票

你仍然可以使用tf.random.categorical。 logits只是非标准化的日志概率。因此,如果您已准备好概率分布,则可以执行:

samples = tf.random.categorical(tf.log(input_tensor_normalized), num_samples)
© www.soinside.com 2019 - 2024. All rights reserved.