我有一个张量流模型,该模型由几个查看不同数据的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
其中weight_noise是一个浮点数(默认值为0.01),并且
def random_noise(self, shape, noise):
return tf.random_normal(shape, stddev=noise)
self._Sess 是类中存储的张量流会话的位置。我打电话
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)
我在一个小的玩具示例上对此进行了测试,并认为它可以工作(变量值已更新)。但是,我已将我的实际数据和模型上的 weight_noise 提高到20.0左右,并且验证准确性似乎没有明显的差异,但我希望它非常低。 / p>
有人知道为什么这行不通吗,还是让我指向实现LSTM重量噪声的代码(我已经检查过但找不到任何示例)。