Python 在Tensorflow中向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 =

我有一个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 = 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)