【问题标题】:How to create a custom layer for Sampling in Keras Tensorflow?如何在 Keras Tensorflow 中为采样创建自定义层?
【发布时间】: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.categoricallogits 作为输入(我不认为这是我的情况)并且没有提出概率分布。

一种可能性是将输入张量重塑为一个向量,如果有办法在 Tensorflow 中执行一维采样,构造一个相似的向量,其对应索引处的采样值和其他位置为零,然后再整形为张量。

还有什么想法吗?

我应该迁移到 PyTorch 吗?

非常感谢

【问题讨论】:

标签: python tensorflow keras pytorch sampling


【解决方案1】:

您仍然可以使用tf.random.categorical。 logits 只是非标准化的对数概率。因此,如果您已经准备好概率分布,您可以执行以下操作:

samples = tf.random.categorical(tf.log(input_tensor_normalized), num_samples)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 2021-02-22
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    相关资源
    最近更新 更多