gpt4 book ai didi

tensorflow - 如何在训练期间更改 tensorflow 优化器

转载 作者:行者123 更新时间:2023-12-02 17:26:10 25 4
gpt4 key购买 nike

我之前读过,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_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)

关于tensorflow - 如何在训练期间更改 tensorflow 优化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48259650/

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