我是Keras的新手,我有一个用Keras编写的项目,我想对其稍作修改。我的想法是在每个时期将随机噪声添加到输入张量的随机样本中。因此,在每个时期,输入数据的随机索引都会被噪声破坏。
如果我在馈入角点之前将噪声注入特征model.fit()
,则噪声将添加到输入张量的相同样本中,并且在整个训练过程中将保持不变。但是我想在每个时期之后更改随机样本。
因此,我尝试使用回调:
class Noisify(Callback):
def __init__(self,mixture_rate = 0.2):
self.mixture_rate = mixture_rate
def on_epoch_begin(self,epoch,logs={}):
# get input tensor
'''
mix randomly noisy and clean features here
'''
# set input tensor
但是我找不到像model.get_layer
或get_weights
这样的方法来获取和设置输入张量。怎么办
只需在模型中添加noise layer。
它可以批量工作,但是由于您需要随机噪声,所以这不是问题。
或者,使用以下任何一种:
keras.backend.random_normal
keras.backend.random_uniform
keras.backend.random_binomial
keras.backend.truncated_normal
请参见Keras backend documentation。
工作示例
import numpy as np
from keras import backend as K
from keras.models import Model
from keras.layers import *
ins = Input((10,2))
outs = Lambda(lambda x: K.random_normal(shape=K.shape(x),
mean=0.0,
stddev=1.0,
seed=None))(ins)
model = Model(ins, outs)
for batch in range(10):
print("\n\nbatch", batch, ':')
print(model.predict_on_batch(np.zeros((5,10,2))))