Я работаю над проектом, в котором мне нужно выполнить следующую задачу:
Учитывая данные предыдущего слоя в кератах, A, сделать следующее:
вычислить норму l2 входных данных этого слоя
вычислить норму l2 весового тензора из предыдущего слоя.
умножитьэти две величины с помощью тензора той же формы, что и А, который полон гауссовского шума.
Добавьте эту новую вычисленную величину обратно в А и отправьте ее на следующий слой.
Current У меня есть следующая функция, которую я использовал:
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.
Как вы можете видеть, яУ меня проблемы с генерацией гауссовского шума.