Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.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
Python Tensorflow:恢复模型后如何更改优化器?_Python_Optimization_Tensorflow - Fatal编程技术网

Python Tensorflow:恢复模型后如何更改优化器?

Python Tensorflow:恢复模型后如何更改优化器?,python,optimization,tensorflow,Python,Optimization,Tensorflow,我是TensorFlow的新手,不知道如何解决这个关于更改优化器的简单问题 例如,我想在恢复模型后将“AdamOptimizer”更改为“MomentumOptimizer” # optimizer = tf.train.AdamOptimizer(self.learning_rate) optimizer = tf.train.MomentumOptimizer(learning_rate=self.learning_rate, momentum=0.8) 如果将“self.saver=tf

我是TensorFlow的新手,不知道如何解决这个关于更改优化器的简单问题

例如,我想在恢复模型后将“AdamOptimizer”更改为“MomentumOptimizer”

# optimizer = tf.train.AdamOptimizer(self.learning_rate)
optimizer = tf.train.MomentumOptimizer(learning_rate=self.learning_rate, momentum=0.8)
如果将“self.saver=tf.train.saver(tf.global_variables())”放在优化器后面,则会引发如下NotFoundError

NotFoundError(回溯见上文):检查点中未找到关键动态\u seq2seq/解码器/注意/注意层/内核/动量

如果将“self.saver=tf.train.saver(tf.global_variables())”放在优化器之前,则在加载模型并开始训练后,将引发FailedPreception错误,如下所示

FailedPreceptionError(回溯见上文):尝试使用未初始化的值dynamic\u-seq2seq/解码器/内存层/内核/动量

在这些代码之后调用“saver.restore(session,model_file)”

在TensorFlow中,如何在成功恢复模型后更改优化器而不出现错误?

简而言之:

将tensorflow导入为tf
新的\u优化器=tf.train.XXXOptimizer()
变量列表=tf.可训练变量()
#或者如果某些变量被冻结
var_list=tf.tf.global_variables()
#告诉新的优化器
新的\u优化器。\u创建\u插槽(var\u list=var\u list)
一点背景信息:

优化器可以定义他们需要的额外变量。他们为每个可训练变量创建这些变量。这在两种情况下成为问题

  • 一个是在培训期间更改优化器,因为这是本问题的范围
  • 在训练期间解冻变量。根据暗示,该变量在之前被标记为
    trainable=False
    。这意味着以前使用的优化器(可以是相同的或不同的)没有创建这些辅助变量。他们当时不包括在检查点内。加载失败,因为假定它们存在。上述示例可以变得简单得多:
  • trainable=False#或True
    层=tf.layers.layer(可训练=可训练)
    输出=层(输入)
    新的\u优化器。\u创建\u插槽(var\u list=layer.variables)
    
    上述方法适用于所有优化器,因为按照惯例,如果需要创建其他变量,每个
    tf.train.xxx优化器
    都必须实现
    \u create\u slots()
    。然而,这并不是最好的解决方案,因为它使用私有API