python - 在 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 添加权重噪声的代码(我已经检查过但找不到任何示例)。
解决方案
推荐阅读
- xml - XSLT 1.0 - 使用 Vanilla XSLT 1.0 或 PHP XSLT 的节点中值唯一性的输出计数
- javascript - 如何指定我的 Vue 项目的 ECMAScript 版本目标?
- postgresql - 在 PostgreSQL 中以列表格式显示数据
- java - 在Tomcat中部署后Spring Boot Admin无法正常工作
- assembly - 我需要汇编程序中的数据部分吗?
- reactjs - 如何在反应中解决这个问题?
- python - TensorFlow 训练在音频分类器的第一个时期的最后一步崩溃
- java - 如何删除Java中的一些特殊字符?
- mysql - proxysql - 同时拥有主机组“-1”和“1”
- go - 如何(深度)在 Go 中复制字符串?