我想制作Keras的高斯噪声层,对数据集的每一列施加具有不同stddev级别的噪声。但是,由于我对编码方面的知识不多,所以有一个很大的问题,我自己无法解决。
使用Keras高斯噪声层的源代码,
我做了如下代码:
def call(self, inputs, training=None):
def noised():
temp=inputs
for i in range(100):
temp[:,i]=temp[:,i]+K.random_normal(shape=
(len(inputs),1),mean=0.,stddev=self.stddev[i])
return temp
return K.in_train_phase(noised, inputs, training=training)
但是,它显示出如下错误:
object of type 'Tensor' has no len()
我认为错误来自不同类型的形状。
因为原始代码如下所示:
def noised():
return inputs + K.random_normal(shape=K.shape(inputs),
mean=0.,
stddev=self.stddev)
使用shape(K.shape)的符号类型,而我施加的是数字(len())的整数类型。
但是,我不知道解决该问题的方法。
如果您给我一些解决方法,对我来说真的是一个很大的帮助。
非常感谢您的帮助。
答案 0 :(得分:1)
我知道这太晚了,但也许对其他人来说仍然很有趣。我使用的是 Tensorflow 2.3.0,我只能使用 numpy 切片命令。所以切片张量,应用各个层并将它们合并在一起:
input = tf.keras.Input(shape=(None,3))
x1 = GaussianNoise(0.1)(input[:,:,0:1])
x2 = GaussianNoise(0.2)(input[:,:,1:2])
x3 = GaussianNoise(0.3)(input[:,:,2:3])
x = Concatenate()([x1,x2,x3])