我正在尝试通过保护程序加载已保存的模型,并通过测试数据评估网络的输出,恢复已保存的模型并将网络用作函数:
def model(x, x_size):
with tf.variable_scope("my_net", reuse=tf.AUTO_REUSE):
W1 = tf.get_variable('w1', [x_size, x_size],
initializer=tf.random_normal_initializer())
b1 = tf.get_variable('b1', [x_size],
initializer=tf.random_normal_initializer())
y1 = tf.nn.relu(tf.matmul(x, W1) + b1,'y1')
return y1
eval_x = tf.placeholder(tf.float32, name='eval_x', shape=[None, x_size])
eval_probs = model(eval_x, x_size)
with tf.Session() as sess:
new_saver = tf.train.import_meta_graph('save_model/model.ckpt.meta')
new_saver.restore(sess, "save_model/model.ckpt")
probs = sess.run(eval_probs, feed_dict={eval_x: test_x})
我得到的错误是:
FailedPreconditionError(参见上面的回溯):尝试使用未初始化的值my_net / w1 [[Node:my_net / w1 / read = IdentityT = DT_FLOAT,class = [“loc:@ my_net / w1”], device =“/ job:本地主机/复制:0 /任务:0 /装置:CPU:0" ]]
有人可以帮忙吗?
2 回答
您需要运行特殊操作来初始化变量,如
w1
. 一种简单的方法是在创建会话之后但在使用变量之前执行sess.run(tf.global_variables_initializer())
.从代码中看来,你似乎没有传递任何 Value
所以我认为你的变量没有初始化 .