【发布时间】:2018-09-02 11:39:40
【问题描述】:
我正在努力恢复模型一天,但没有任何成功。我的代码由class TF_MLPRegressor() 组成,我在构造函数中定义了网络架构。然后我调用fit() 函数进行训练。所以这就是我如何在fit() 函数中保存一个带有 1 个隐藏层的简单感知器模型:
starting_epoch = 0
# Launch the graph
tf.set_random_seed(self.random_state) # fix the random seed before creating the Session in order to take effect!
if hasattr(self, 'sess'):
self.sess.close()
del self.sess # delete Session to release memory
gc.collect()
self.sess = tf.Session(config=self.config) # save the session to predict from new data
# Create a saver object which will save all the variables
saver = tf.train.Saver(max_to_keep=2) # max_to_keep=2 means to not keep more than 2 checkpoint files
self.sess.run(tf.global_variables_initializer())
# ... (each 100 epochs)
saver.save(self.sess, self.checkpoint_dir+"/resume", global_step=epoch)
然后我创建一个具有完全相同输入参数值的新TF_MLPRegressor() 实例并调用fit() 函数来恢复模型,如下所示:
self.sess = tf.Session(config=self.config) # create a new session to load saved variables
ckpt = tf.train.latest_checkpoint(self.checkpoint_dir)
starting_epoch = int(ckpt.split('-')[-1])
metagraph = ".".join([ckpt, 'meta'])
saver = tf.train.import_meta_graph(metagraph)
self.sess.run(tf.global_variables_initializer()) # Initialize variables
lhl = tf.trainable_variables()[2]
lhlA = lhl.eval(session=self.sess)
saver.restore(sess=self.sess, save_path=ckpt) # Restore model weights from previously saved model
lhlB = lhl.eval(session=self.sess)
print lhlA == lhlB
lhlA 和lhlB 是恢复前后的最后一个隐藏层权重,根据我的代码它们完全匹配,即保存的模型不会加载到会话中。我做错了什么?
【问题讨论】:
标签: python tensorflow deep-learning restore checkpoint