在TensorFlow中累积渐变的有效方法

时间:2018-05-05 22:42:45

标签: python-3.x tensorflow deep-learning

似乎已经有一些关于“如何”在TensorFlow中累积渐变的问题。这是originalduplicate

接受的建议taken from this issue是执行以下操作:

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)

我设法在Jupyter notebook中实现了这个最小的例子,但我对解决方案的临时性质感到困扰。而且,如笔记本所示,当第二次进行训练时,蓄能器会产生问题。我现在不清楚如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

因此,我找到了解决问题的方法,并将解决方法发布到public gist中。关键是在编译新图形并在同一笔记本上第二次运行训练时重置默认图形。

所以我们有:

tf.reset_default_graph()

model = mnist_network(seed = 42)