首页 > 解决方案 > 使用 tensorflow,您如何平均多个批次的参数梯度值并使用该平均值进行更新?

问题描述

像许多开发深度学习模型的人一样,我受到硬件资源的阻碍,即 GPU 内存。我有一个音频分类问题,我正在尝试许多 RNN。数据非常大,我只能使用小批量,并且还必须限制 lstm 大小。我了解许多人使用频谱图或其他方法向网络提供更精简的数据,但我特别想知道如何使用原始数据来做到这一点。

这就是我目前正在做的大约 4 的批量大小:

loss_op = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=label_op))

optimisation_op = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(loss_op)

理想情况下,我希望在 GPU 上计算一个批次的每个参数的梯度,然后将它们移动到 RAM,同时计算下一批的梯度。经过一些批次后,我想平均每个参数的梯度并使用它们来更新网络。

我从 inception github 页面得到了这个想法,该页面描述了类似于在多个 GPU 上并行化的内容:https ://github.com/tensorflow/models/tree/master/research/inception

标签: pythontensorflowrnntensorflow-gradient

解决方案


使用 tf.Variable 对象来存储渐变。将它们放在 CPU 上。


推荐阅读