Python Tensorflow:恢复模型后如何更改优化器?
我是TensorFlow的新手,不知道如何解决这个关于更改优化器的简单问题 例如,我想在恢复模型后将“AdamOptimizer”更改为“MomentumOptimizer”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
# 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