Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
培训期间如何更改tensorflow optimizer_Tensorflow - Fatal编程技术网

培训期间如何更改tensorflow optimizer

培训期间如何更改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

我之前读过,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)
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来获得列车运行。我只是想展示一下我是如何在训练中改变操作的。不管怎样,都是我的错。谢谢