【问题标题】:Poisson/non-negative gaussian noise data augmentation in KerasKeras 中的泊松/非负高斯噪声数据增强
【发布时间】:2020-10-23 06:17:12
【问题描述】:

在将能量分布的“图像”传递给 CNN 之前,我正在使用 Keras 进行一些数据增强。我想给图片加点噪点,但是这个噪点不能小于0。

数据是一个numpy形状的数组(5000,29,29),数据扩充的代码目前是:

data_augmentation = keras.Sequential([
  keras.layers.experimental.preprocessing.RandomFlip(), 
  keras.layers.GaussianNoise(1)
], name='DataAugm')

有没有办法添加泊松噪声,这显然已经是非负的,或者带有被截断到数据增强层的负值的高斯噪声,或者我必须在解析之前手动将它添加到数据中神经网络?

编辑:遵循此处给出的建议:How to add a noise with uniform distribution to input data in Keras?

我创建了一个这样的类:

class noiseLayer(keras.layers.Layer):

    def __init__(self,mean):
        super(noiseLayer, self).__init__()
        self.mean = mean

    def call(self, input):

        mean = self.mean

        return input + np.random.poisson(mean)

然后我将它添加到我的数据增强中,如下所示:

data_augmentation = keras.Sequential([
  keras.layers.experimental.preprocessing.RandomFlip(),
  noiseLayer(mean = 1)(x)
], name='DataAugm')

但我得到了错误: 添加的图层必须是图层类的实例。找到:Tensor("noise_layer_8/Identity:0", shape=(None, 29, 29, 1), dtype=float32)

我不明白为什么定义为 keras.layer 的类实际上不被视为层。

有人可以帮我解决这个问题吗?

第二次编辑以删除 tf.keras,因为我读到问题可能是 tf.keras 层和 keras 层之间的兼容性,但是我仍然遇到同样的错误

【问题讨论】:

    标签: python tensorflow keras noise data-augmentation


    【解决方案1】:

    供将来参考:

    根据youngseok jeon 在我上面链接的线程上的建议,问题似乎在于包含(x)。

    改用:

    data_augmentation = keras.Sequential([
      keras.layers.experimental.preprocessing.RandomFlip(),
      noiseLayer(mean = 1)
    ], name='DataAugm')
    

    代码运行没有错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-07
      • 2015-09-26
      • 2013-10-17
      • 1970-01-01
      • 2014-08-26
      相关资源
      最近更新 更多