85

我遵循给定的 mnist 教程,能够训练模型并评估其准确性。但是,教程没有展示如何在给定模型的情况下进行预测。我对准确性不感兴趣,我只想使用模型来预测一个新示例,并在输出中查看所有结果(标签),每个结果都有其分配的分数(排序或未排序)。

4

4 回答 4

75

在“ Deep MNIST for Experts ”示例中,请参见以下行:

我们现在可以实现我们的回归模型。只需要一根线!我们将矢量化输入图像 x 乘以权重矩阵 W,加上偏置 b,并计算分配给每个类别的 softmax 概率。

y = tf.nn.softmax(tf.matmul(x,W) + b)

只需拉上节点 y,你就会得到你想要的。

feed_dict = {x: [your_image]}
classification = tf.run(y, feed_dict)
print classification

这几乎适用于您创建的任何模型 - 您将计算预测概率作为计算损失之前的最后一步之一。

于 2015-11-14T22:06:53.443 回答
16

正如@dga 建议的那样,您需要通过已经预测的模型运行新的数据实例。

这是一个例子:

假设您完成了第一个教程并计算了模型的准确性(模型是这样的:)y = tf.nn.softmax(tf.matmul(x, W) + b)。现在你抓住你的模型并将新的数据点应用到它上面。在下面的代码中,我计算向量,得到最大值的位置。显示图像并打印最大位置。

from matplotlib import pyplot as plt
from random import randint
num = randint(0, mnist.test.images.shape[0])
img = mnist.test.images[num]

classification = sess.run(tf.argmax(y, 1), feed_dict={x: [img]})
plt.imshow(img.reshape(28, 28), cmap=plt.cm.binary)
plt.show()
print 'NN predicted', classification[0]
于 2015-11-15T06:34:14.423 回答
4

2.0 兼容答案:假设您已经构建了一个 Keras 模型,如下所示:

model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),
    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

然后使用以下代码训练和评估模型:

model.fit(train_images, train_labels, epochs=10)
test_loss, test_acc = model.evaluate(test_images,  test_labels, verbose=2)

之后,如果要预测特定图像的类别,可以使用以下代码进行:

predictions_single = model.predict(img)

如果要预测一组图像的类别,可以使用以下代码:

predictions = model.predict(new_images)

其中new_images是图像数组。

有关更多信息,请参阅此Tensorflow 教程

于 2020-01-21T09:06:05.333 回答
2

这个问题专门关于Google MNIST tutorial,它定义了一个预测器,但没有应用它。使用Jonathan Hui 的 TensorFlow Estimator 博客文章中的指导,以下代码完全符合 Google 教程并进行预测:

from matplotlib import pyplot as plt

images = mnist.test.images[0:10]

predict_input_fn = tf.estimator.inputs.numpy_input_fn(
      x={"x":images},
      num_epochs=1,
      shuffle=False)

mnist_classifier.predict(input_fn=predict_input_fn)

for image,p in zip(images,mnist_classifier.predict(input_fn=predict_input_fn)):
    print(np.argmax(p['probabilities']))
    plt.imshow(image.reshape(28, 28), cmap=plt.cm.binary)
    plt.show()
于 2018-06-23T14:33:30.077 回答