【发布时间】:2017-06-12 23:15:36
【问题描述】:
我已经建立了一个运行良好的简单 tensorflow 模型。 在训练时,我会保存 meta_graph 以及不同步骤的一些参数。
之后(在新脚本中)我想恢复保存的 meta_graph 并恢复变量和操作。
一切正常,但只有
with tf.name_scope('MSE'):
error = tf.losses.mean_squared_error(Y, yhat, scope="error")
不会恢复。用下面这行
mse_error = graph.get_tensor_by_name("MSE/error:0")
"名称 'MSE/error:0' 指的是一个不存在的张量。 图中不存在操作“MSE/错误”。”
出现此错误消息。
由于我对其他变量和操作进行了完全相同的过程,这些变量和操作恢复时没有任何错误,我不知道如何处理。唯一不同的是 tf.losses.mean_squared_error 函数中只有 scope 属性,没有 name 属性。
那么如何用范围恢复损失操作呢?
这里是我如何保存和加载模型的代码。
保存:
# define network ...
saver = tf.train.Saver(max_to_keep=10)
sess = tf.Session()
sess.run(tf.global_variables_initializer())
for i in range(NUM_EPOCHS):
# do training ..., save model all 1000 optimization steps
if (i + 1) % 1000 == 0:
saver.save(sess, "L:/model/mlp_model", global_step=(i+1))
恢复:
# start a session
sess=tf.Session()
# load meta graph
saver = tf.train.import_meta_graph('L:\\model\\mlp_model-1000.meta')
# restore weights
saver.restore(sess, tf.train.latest_checkpoint('L:\\model\\'))
# access network nodes
graph = tf.get_default_graph()
X = graph.get_tensor_by_name("Input/X:0")
Y = graph.get_tensor_by_name("Input/Y:0")
# restore output-generating operation used for prediction
yhat_op = graph.get_tensor_by_name("OutputLayer/yhat:0")
mse_error = graph.get_tensor_by_name("MSE/error:0") # this one doesn't work
【问题讨论】:
-
感谢您的回复。我添加了两个脚本的草图。
标签: tensorflow scope restore