在Tensorflow中为LSTM权重添加噪声

时间:2018-07-27 11:52:14

标签: python tensorflow lstm 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

其中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重量噪声的代码(我已经检查过但找不到任何示例)。

0 个答案:

没有答案