我正在Keras中使用Tensorflow后端构建CNN,我想介绍一个应该执行以下操作的自定义层:
现在,我已经设法构建了一个模型,我在其中选择输入张量的前25%像素并仅从它们创建相同大小的输出张量。但它不是随机抽样。
理想情况下,我想使用张量等价的:np.random.choice(input_tensor, num_samples, input_tensor_normalized)
,其中第三个参数是要遵循的概率分布。请注意,这仅适用于1D np.array。
我听说过tf.random.multinomial
,但它已经贬值了,tf.random.categorical
将logits
作为输入(我不认为这是我的情况)并且不提出概率分布。
一种可能性是将输入张量重新整形为矢量,如果有方法则在Tensorflow中执行1D采样,在相应的索引处构造具有采样值的类似矢量,在其他地方构造零,然后再重塑为张量。
还有其他想法吗?
我应该搬到PyTorch吗?
非常感谢你
你仍然可以使用tf.random.categorical
。 logits只是非标准化的日志概率。因此,如果您已准备好概率分布,则可以执行:
samples = tf.random.categorical(tf.log(input_tensor_normalized), num_samples)