我正在学习tensorflow。完成tensorflow教程后,请选择专家列表(https://www.tensorflow.org/get_started/mnist/pros),我尝试使用经过训练的模型进行推理。我复制了两个[28x28]图像,将它们放入[28x28x2]数组中,并保存了一个matlab文件。然后,我使用以下代码运行推断:
data = sio.loadmat("data/test/testdig.mat")
data = tf.reshape(data["testdig"], [-1, 28, 28, 1])
x = tf.placeholder(tf.float32, shape=[None, 28, 28, 1]);
W_conv1 = weight_variable([5, 5, 1, 32])
b_conv1 = bias_variable([32])
h_conv1 = tf.nn.relu(conv2d(x, W_conv1) + b_conv1)
h_pool1 = max_pool_2x2(h_conv1)
....CNN network stuff
y_conv = tf.matmul(h_fc1_drop, W_fc2) + b_fc2
prediction = tf.argmax(y_conv, 1)
saver = tf.train.Saver()
with tf.Session() as sess:
saver.restore(sess, "model/mnist.ckpt") //restored the saved model
print(prediction.eval(feed_dict={x: data, keep_prob: 1.0}))
但是,上面的代码在最后一行给了我一个错误:
raise TypeError('提要的值不能是tf.Tensor对象。'TypeError:提要的值不能是tf.Tensor对象。可接受的提要值包括Python标量、字符串、列表、numpy ndarray或TensorHandles。
为什么?
在您的代码中:
data = tf.reshape(data["testdig"], [-1, 28, 28, 1])
这意味着数据是一个将在以后某个时间计算的张量。您不能将其用作输入,因为您不知道该值。
您需要在x
(您的占位符)上应用重塑,以便它在模型中发生,
或者使用Numpy操作来重新塑造数据,使其符合tenstorflow期望的内容。