我正在一个需要执行以下任务的项目中:
给出来自keras中上一层的输入,请执行以下操作:
计算该层输入的l2范数
计算上一层的权重张量的l2范数。
将这两个量乘以一个与A形状相同的张量,该张量充满高斯噪声。
将此新的计算量添加回A,并将其发送到下一层。
当前,我一直在使用以下功能:
def add_noise(sample,filter_scalar):
input_shape = sample.__dict__["_keras_shape"]
x = input_shape[1]
y = input_shape[2]
features = input_shape[3]
#compute |A| * |B|
dot_a = keras.layers.multiply([sample,sample])
norm_a = Lambda(lambda x: filter_scalar * K.sqrt(K.cumsum(x)))(dot_a)
#compute wij
gaussian_weights = K.random_normal(shape=(x,y,features),mean=0.0,stddev=1.0)
# keras.layers.add([gaussian_weights,gaussian_weights])
#connect layers together again
# norm_product = Lambda()(sample)
# print("norm product",norm_product)
return keras.layers.add([sample,norm_a])
我打算在功能API的各层之间调用此功能。
如您所见,我在实际产生高斯噪声时遇到问题。