培训期间如何更改tensorflow optimizer
我之前读过,sgd的概括能力更好,但adam在训练的早期阶段收敛得很快。 因此,我想在完成一些步骤后更改我的优化器。但下面这样的代码引发了预条件错误。如果有人知道如何在培训期间更换优化器培训期间如何更改tensorflow optimizer,tensorflow,Tensorflow,我之前读过,sgd的概括能力更好,但adam在训练的早期阶段收敛得很快。 因此,我想在完成一些步骤后更改我的优化器。但下面这样的代码引发了预条件错误。如果有人知道如何在培训期间更换优化器 for i in range(config.train_steps): _, l, s = sess.run([train_op, loss, summary]) if i % 100 == 0: saver.save(sess, os.path.join(args.model
for i in range(config.train_steps):
_, l, s = sess.run([train_op, loss, summary])
if i % 100 == 0:
saver.save(sess, os.path.join(args.model_dir,
'model.ckpt'))
writer.add_summary(s, i)
print('loss: ', l)
if i == 1000:
train_op = tf.train.GradientDescentOptimizer(learning_rate)
coord.request_stop()
coord.join(threads)
您不能这样更改优化器,但可以创建两个优化器,并首先使用一个,然后使用另一个。这基本上就是您在代码中所做的。问题是优化器经常有一些相关的内部变量,在能够使用它之前,您需要像初始化其他变量一样对这些变量进行初始化。另外,您的代码也不是完全正确的,因为您没有调用
minimize
操作。请尝试以下方式:
early_train_op = tf.train.AdamOptimizer().minimize(loss)
late_train_op = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)
# Call this after everything, including optimizers, has been created
init_op = tf.initialize_global_variables()
with tf.Session() as sess:
sess.run(init_op) # Now everything is correctly initialized
for i in range(config.train_steps):
if i < 1000:
current_train_op = early_train_op
else:
current_train_op = late_train_op
_, l, s = sess.run([current_train_op, loss, summary])
if i % 100 == 0:
saver.save(sess, os.path.join(args.model_dir,
'model.ckpt'))
writer.add_summary(s, i)
print('loss: ', l)
coord.request_stop()
coord.join(threads)
early\u train\u op=tf.train.AdamOptimizer()。最小化(损失)
延迟训练op=tf.train.GradientDescentOptimizer(学习率)。最小化(损失)
#在创建所有内容(包括优化器)后调用此函数
init_op=tf.initialize_global_variables()
使用tf.Session()作为sess:
sess.run(init_op)#现在所有内容都已正确初始化
对于范围内的i(配置列车步数):
如果i<1000:
当前列车运行=早期列车运行
其他:
当前列车运行=晚点列车运行
_,l,s=系统运行([当前列车运行,损失,汇总])
如果i%100==0:
saver.save(sess,os.path.join(args.model_dir,
“model.ckpt”)
作者.添加摘要(s,i)
打印('丢失:',l)
协调请求停止()
坐标连接(线程)
请参阅@Maxim的可能副本对不起,您是对的。为什么我能在之前找到这个问题…我试试看。事实上,我使用tf.contrib.layers.optimize_loss来获得列车运行。我只是想展示一下我是如何在训练中改变操作的。不管怎样,都是我的错。谢谢