gpt4 book ai didi

python - 如何用累积梯度更新模型参数?

转载 作者:太空狗 更新时间:2023-10-29 17:18:28 24 4
gpt4 key购买 nike

我正在使用 TensorFlow 构建深度学习模型。 TensorFlow 的新手。

由于某种原因,我的模型的批量大小有限,那么这种有限的批量大小会使模型具有高方差。

所以,我想使用一些技巧来增大批量大小。我的想法是存储每个 mini-batch 的梯度,例如 64 个 mini-batch,然后将梯度相加,使用这 64 个 mini-batch 训练数据的平均梯度来更新模型的参数。

这意味着对于前 63 个 mini-batch,不更新参数,在第 64 个 mini-batch 之后,只更新一次模型的参数。

但是由于 TensorFlow 是基于图形的,有人知道如何实现这个想要的功能吗?

非常感谢。

最佳答案

我在这里找到了解决方案:https://github.com/tensorflow/tensorflow/issues/3994#event-766328647

opt = tf.train.AdamOptimizer()
tvs = tf.trainable_variables()
accum_vars = [tf.Variable(tf.zeros_like(tv.initialized_value()), trainable=False) for tv in tvs]
zero_ops = [tv.assign(tf.zeros_like(tv)) for tv in accum_vars]
gvs = opt.compute_gradients(rmse, tvs)
accum_ops = [accum_vars[i].assign_add(gv[0]) for i, gv in enumerate(gvs)]
train_step = opt.apply_gradients([(accum_vars[i], gv[1]) for i, gv in enumerate(gvs)])

在训练循环中:

while True:
sess.run(zero_ops)
for i in xrange(n_minibatches):
sess.run(accum_ops, feed_dict=dict(X: Xs[i], y: ys[i]))
sess.run(train_step)

但是这段代码看起来不是很干净漂亮,有谁知道如何优化这些代码吗?

关于python - 如何用累积梯度更新模型参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42156957/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com