使用 TensorFlow 模型进行预测
Making predictions with a TensorFlow model
我遵循了给定的 mnist 教程并且能够训练模型并评估其准确性。但是,教程并未展示如何根据给定的模型进行预测。我对准确性不感兴趣,我只想使用该模型来预测一个新示例,并在输出中查看所有结果(标签),每个结果都有其分配的分数(排序或未排序)。
在“Deep MNIST for Experts”示例中,看到这一行:
We can now implement our regression model. It only takes one line! We
multiply the vectorized input images x by the weight matrix W, add the
bias b, and compute the softmax probabilities that are assigned to
each class.
y = tf.nn.softmax(tf.matmul(x,W) + b)
只要拉上节点 y,你就会得到你想要的。
feed_dict = {x: [your_image]}
classification = tf.run(y, feed_dict)
print classification
这几乎适用于您创建的任何模型 - 您将计算预测概率作为计算损失之前的最后步骤之一。
正如@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]
这个问题专门针对 Google MNIST tutorial, which defines a predictor but doesn't apply it. Using guidance from Jonathan Hui's TensorFlow Estimator blog post,这里是完全符合 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()
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)
之后,如果你想预测特定图像的class,你可以使用下面的代码来完成:
predictions_single = model.predict(img)
如果你想预测一组图像的classes,你可以使用下面的代码:
predictions = model.predict(new_images)
其中 new_images
是图像数组。
有关详细信息,请参阅此 Tensorflow Tutorial。
我遵循了给定的 mnist 教程并且能够训练模型并评估其准确性。但是,教程并未展示如何根据给定的模型进行预测。我对准确性不感兴趣,我只想使用该模型来预测一个新示例,并在输出中查看所有结果(标签),每个结果都有其分配的分数(排序或未排序)。
在“Deep MNIST for Experts”示例中,看到这一行:
We can now implement our regression model. It only takes one line! We multiply the vectorized input images x by the weight matrix W, add the bias b, and compute the softmax probabilities that are assigned to each class.
y = tf.nn.softmax(tf.matmul(x,W) + b)
只要拉上节点 y,你就会得到你想要的。
feed_dict = {x: [your_image]}
classification = tf.run(y, feed_dict)
print classification
这几乎适用于您创建的任何模型 - 您将计算预测概率作为计算损失之前的最后步骤之一。
正如@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]
这个问题专门针对 Google MNIST tutorial, which defines a predictor but doesn't apply it. Using guidance from Jonathan Hui's TensorFlow Estimator blog post,这里是完全符合 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()
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)
之后,如果你想预测特定图像的class,你可以使用下面的代码来完成:
predictions_single = model.predict(img)
如果你想预测一组图像的classes,你可以使用下面的代码:
predictions = model.predict(new_images)
其中 new_images
是图像数组。
有关详细信息,请参阅此 Tensorflow Tutorial。