wei*_*ong 15 python gradient tensorflow
我正在使用TensorFlow构建一个深度学习模型.TensorFlow的新手.
由于某种原因,我的模型具有有限的批量大小,然后这种有限的批量大小将使模型具有高的方差.
所以,我想用一些技巧来增加批量.我的想法是存储每个小批量的渐变,例如64个小批量,然后将渐变相加,使用这64个小批量训练数据的平均梯度来更新模型的参数.
这意味着对于前63个小批量,不更新参数,并且在64小批量之后,仅更新模型的参数一次.
但由于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)])
Run Code Online (Sandbox Code Playgroud)
在训练循环中:
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)
Run Code Online (Sandbox Code Playgroud)
但是这段代码看起来不是很干净漂亮,有谁知道如何优化这些代码?
| 归档时间: |
|
| 查看次数: |
5812 次 |
| 最近记录: |