python - 使用 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
解决方案
使用 tf.Variable 对象来存储渐变。将它们放在 CPU 上。
推荐阅读
- typescript - onClick - 我怎样才能获得最近的元素
- java - 如何使用 JFrame 创建视频播放器?
- php - Amazon ElasticSearch Service 未知聚合类型箱线图
- minishift - 在 dhcp 租约文件中找不到 IP 地址 - minishift
- python - Django如何测试是否正在使用密码验证器
- javascript - Cookie 未设置
- django - Django charfield 选择兼容性
- dapper - 如何使用 Dapper.Contrib 和 FluentMap 来更新具有标识列的实体?
- azure - Azure 前门配置更改
- c# - System.IdentityModel.Tokens.Jwt 未找到