Python 在Tensorflow中向LSTM权重添加噪声
我有一个tensorflow模型,它由几个RNN组成,这些RNN查看不同的数据,然后将这些数据合并并通过LSTM提供。我已经实施了将噪声添加到RNN和LSTM中权重的方法:Python 在Tensorflow中向LSTM权重添加噪声,python,tensorflow,lstm,rnn,Python,Tensorflow,Lstm,Rnn,我有一个tensorflow模型,它由几个RNN组成,这些RNN查看不同的数据,然后将这些数据合并并通过LSTM提供。我已经实施了将噪声添加到RNN和LSTM中权重的方法: def _add_weight_noise(self): tvars = [v for v in tf.trainable_variables()] noises = {} for v in tvars: if 'kernel' in v.name: val =
def _add_weight_noise(self):
tvars = [v for v in tf.trainable_variables()]
noises = {}
for v in tvars:
if 'kernel' in v.name:
val = self._Sess.run(v.name)
noise = self._Sess.run(self.random_noise(v.shape, weight_noise))
noises[v.name] = noise
new_val = val + noise
assigner = tf.assign(v, new_val)
self._Sess.run(assigner)
self._noises = noises
其中,权重_噪波是一个浮点值(默认值为0.01),并且
self.\u Sess是类中存储tensorflow会话的位置。我打电话
self._Sess.run(tf.global_variables_initializer())
在第一次调用_add_weight_noise()之前
在对当前批次运行优化器/精度等之前,我调用_add_weight_noise(),并在继续训练数据中的下一批次之前移除权重噪波
def _remove_weight_noise(self):
tvars = [v for v in tf.trainable_variables()]
for v in tvars:
if 'kernel' in v.name:
noise = self._noises[v.name]
val = self._Sess.run(v.name)
new_val = val - noise
assigner = tf.assign(v, new_val)
new_value = self._Sess.run(assigner)
我在一个小玩具示例上测试了这个方法,并相信它是有效的(变量值得到了更新)。然而,在我的实际数据和模型上,我已经将权重噪声增加到了20.0左右,在验证精度上似乎没有任何明显的差异,但我预计它会非常低
有人知道为什么这不起作用吗,或者告诉我实现了向LSTM添加权重噪声的代码(我已经检查过了,但找不到任何示例)
def _remove_weight_noise(self):
tvars = [v for v in tf.trainable_variables()]
for v in tvars:
if 'kernel' in v.name:
noise = self._noises[v.name]
val = self._Sess.run(v.name)
new_val = val - noise
assigner = tf.assign(v, new_val)
new_value = self._Sess.run(assigner)