我正在跟踪this link癌症预测。现在我的训练和测试阶段完成我想提供新数据作为输入并想要预测。为此我保存模型并恢复它以获得预测,但我得到错误
ValueError: Cannot feed value of shape (31,) for Tensor 'Placeholder_1:0', which has shape '(?, 31)'
以下是我的代码:
saver = tf.train.Saver()
sampletest = [-0.24222039 -0.75688274 -0.26264569 -0.75637054 -0.7154845 -0.55675554 -0.51883267 -0.69442359 -0.87362527 -1.46135011 -0.05206671 -0.2790065 -0.28614862 -0.1934161 -0.38264881 -0.1295509 0.05817795 -0.32080093-0.64650773 -0.19383338 -0.14508449 -0.74260509 -0.66173979 -0.73123076-0.68635871 -0.78697688 -0.4790055 -0.71702336 -0.90543288 -1.1197415-0.41889736]
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for epoch in range(training_epochs):
for batch in range(int(n_samples / batch_size)):
batch_x = input_X[batch * batch_size: (1 + batch) * batch_size]
batch_y = input_Y[batch * batch_size: (1 + batch) * batch_size]
print(batch_x[0])
sess.run([optimizer], feed_dict={x: batch_x,
y_: batch_y,
pkeep: training_dropout})
saver.save(sess,'.\cancer_model')
# Display logs after every 10 epochs
if (epoch) % display_step == 0:
train_accuracy, newCost = sess.run([accuracy, cost],
feed_dict={x: input_X, y_: input_Y, pkeep: training_dropout})
valid_accuracy, valid_newCost = sess.run([accuracy, cost],
feed_dict={x: input_X_valid, y_: input_Y_valid, pkeep: 1})
print("Epoch:", epoch, "Acc =", "{:.5f}".format(train_accuracy), "Cost =", "{:.5f}".format(newCost),
"Valid_Acc =", "{:.5f}".format(valid_accuracy), "Valid_Cost = ", "{:.5f}".format(valid_newCost))
# Record the results of the model
accuracy_history.append(train_accuracy)
cost_history.append(newCost)
valid_accuracy_history.append(valid_accuracy)
valid_cost_history.append(valid_newCost)
# If the model does not improve after 15 logs, stop the training.
if valid_accuracy < max(valid_accuracy_history) and epoch > 100:
stop_early += 1
if stop_early == 15:
break
else:
stop_early = 0
print("Optimization Finished!")
with tf.Session() as sess:
saver = tf.train.import_meta_graph('.\Cancer_Model\cancer_model.meta')
saver.restore(sess, tf.train.latest_checkpoint('.\Cancer_Model'))
prediction = sess.run(y4,feed_dict={x:sampletest})
print(prediction)
请帮助我。
答案 0 :(得分:2)
问题是你的模型需要一批例子,而你只是给出了一个例子。尝试更换:
prediction = sess.run(y4, feed_dict={x: sampletest})
使用:
prediction = sess.run(y4, feed_dict={x: [sampletest]})
然后,您将在prediction
中使用单个元素获得“批量”结果。
答案 1 :(得分:1)
我想自从模型恢复后,y4输入的占位符被重命名为Variable_1,以避免命名图变量混淆,试试看看
prediction = sess.run(y4,feed_dict={"Variable_1:0":[sampletest]})
虽然我认为prediction = sess.run(y4,feed_dict={"Variable_1:0":sampletest})
也会奏效
你也应该将y4恢复为
y_4 = graph.get_operation_by_name('y4:0')
然后运行
prediction = sess.run(y_4,feed_dict={"Variable_1:0":[sampletest]})