import tensorflow as tf
v = tf.Variable(10.)
loss = v * v
optimizer = tf.train.AdadeltaOptimizer(1., 0.95, 1e-6)
train_op = optimizer.minimize(loss)
accum = optimizer.get_slot(v, "accum") # accumulator of the square gradients
accum_update = optimizer.get_slot(v, "accum_update") # accumulator of the square updates
sess = tf.Session()
sess.run(tf.initialize_all_variables())
for i in range(100):
sess.run(train_op)
print "%.3f \t %.3f \t %.6f" % tuple(sess.run([v, accum, accum_update]))
简而言之:不要使用Adadelta
现在很少有人使用它,你应该坚持:
0.9
动量的{tf.train.RMSPropOptimizer
:结果对良好的学习率的依赖性较小。该算法与Adadelta非常相似,但在我看来性能更好。如果您真的想使用Adadelta,请使用论文中的参数:
learning_rate=1., rho=0.95, epsilon=1e-6
。一个更大的epsilon
在开始时会有帮助,但是要准备好等待比其他优化器稍长的时间以看到收敛。注意,在论文中,他们甚至不使用学习率,这与保持学习率等于
1
是一样的。长答案
阿达达的起步很慢。来自paper的完整算法是:
问题是它们累积了更新的平方。
我认为Adadelta在比您的网络更大的情况下性能更好,经过一些迭代后,它的性能应该与RMSProp或Adam相当。
下面是我的代码,可以与Adadelta优化器一起使用:
前10行:
相关问题 更多 >
编程相关推荐