首页 > 解决方案 > 在 Tensorflow 中向 LSTM 权重添加噪声

问题描述

我有一个张量流模型,它由几个查看不同数据的 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是存储在类中的 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)

我在一个小玩具示例上对此进行了测试,并相信这是可行的(变量值已更新)。但是,我在实际数据和模型上将weight_noise增加到了 20.0 左右,并且验证准确性似乎没有任何明显差异,但我预计它会非常低。

有谁知道为什么这不起作用,或者指出我已经实现向 LSTM 添加权重噪声的代码(我已经检查过但找不到任何示例)。

标签: pythontensorflowlstmrnn

解决方案


推荐阅读