【发布时间】: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