像许多开发深度学习模型的人一样,我受到硬件资源(即 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
最佳答案
使用 tf.Variable 对象来存储渐变。将它们放在 CPU 上。
关于python - 使用 tensorflow ,如何平均多个批处理的参数梯度值并使用该平均值进行更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52520825/