使用 TensorFlow 对没有验证标签的手写数字进行分类
Using TensorFlow to classify Handwritten Digits without validation labels
我一直在阅读 TensorFlow 教程,并且总体上阅读了有关机器学习的内容。
据我了解,使用神经网络的主要好处之一是它们能够在训练后快速对呈现的输入进行分类。
首先,我开始逐步执行示例代码并查看训练数据的结构,我能够成功地使用基本示例(91% 准确率)来识别我拥有的图像(仅数字)使用以下代码片段创建:
# Training is already done using the code from the tutorial
# Do the same for five
...
test_five_image = np.zeros((28, 28), dtype=np.uint8, order='C')
for five_coords in npg.five_coordinates:
i = int(five_coords[0] / 28)
j = int((five_coords[1] / 28) + 3) # By Eye Centering
test_five_image[i][j] = 0xFF
test_five_image = np.rot90(test_five_image, 1)
Image.fromarray(np.uint8(test_five_image)).save(str(5) + '.bmp')
...
# Images are Four, Five, 0 and 6
test_labels = input_data.dense_to_one_hot(np.array([4, 5, 0, 6], np.int32))
dataset = input_data.DataSet(test_images, test_labels)
print sess.run(accuracy, feed_dict={x: dataset.images, y_: dataset.labels})
由上述代码生成的图像示例:
Bitmap extracted from test data used.
注意: 此图像是根据点列表构建的,然后按比例缩小以适合 28 * 28 阵列。颜色是反转的,因为图像只是直接从 numpy 数组转换为位图。根据 MNIST 文件格式,列表中的每个点都设置为 0xFF,其中 0 为白色,255 为黑色.
上面的代码片段输出 1.0
(有时 0.75
取决于训练的准确性)并且它正确地将输入分类到标签。
所以我的问题是,使用 TensorFlow 构建的神经网络对输入内容进行简单分类所涉及的必要步骤是什么,例如,如果输入是“7”,输出将是:
>>> [0, 0, 0, 0, 0, 0, 0, 1, 0, 0]
我查看了 TensorFlow 文档,但未能提出解决方案。我怀疑这可能是因为教程中缺少某些内容。
谢谢
假设您已遵循 MNIST for ML Beginners Tutorial,要获得简单的预测,请添加一个 argmax 节点,如下所示:
prediction = tf.argmax(y, 1)
然后 运行 输入您要分类的数据:
prediction_val = sess.run(prediction, feed_dict={x: dataset.images})
prediction_val
的形状为 (batch_size,)
并且包含批次中每个图像最可能的标签。
请注意,feed_dict
仅包括 x
而不是 y_
,因为 prediction
不依赖于 y_
。
我一直在阅读 TensorFlow 教程,并且总体上阅读了有关机器学习的内容。
据我了解,使用神经网络的主要好处之一是它们能够在训练后快速对呈现的输入进行分类。
首先,我开始逐步执行示例代码并查看训练数据的结构,我能够成功地使用基本示例(91% 准确率)来识别我拥有的图像(仅数字)使用以下代码片段创建:
# Training is already done using the code from the tutorial
# Do the same for five
...
test_five_image = np.zeros((28, 28), dtype=np.uint8, order='C')
for five_coords in npg.five_coordinates:
i = int(five_coords[0] / 28)
j = int((five_coords[1] / 28) + 3) # By Eye Centering
test_five_image[i][j] = 0xFF
test_five_image = np.rot90(test_five_image, 1)
Image.fromarray(np.uint8(test_five_image)).save(str(5) + '.bmp')
...
# Images are Four, Five, 0 and 6
test_labels = input_data.dense_to_one_hot(np.array([4, 5, 0, 6], np.int32))
dataset = input_data.DataSet(test_images, test_labels)
print sess.run(accuracy, feed_dict={x: dataset.images, y_: dataset.labels})
由上述代码生成的图像示例: Bitmap extracted from test data used.
注意: 此图像是根据点列表构建的,然后按比例缩小以适合 28 * 28 阵列。颜色是反转的,因为图像只是直接从 numpy 数组转换为位图。根据 MNIST 文件格式,列表中的每个点都设置为 0xFF,其中 0 为白色,255 为黑色.
上面的代码片段输出 1.0
(有时 0.75
取决于训练的准确性)并且它正确地将输入分类到标签。
所以我的问题是,使用 TensorFlow 构建的神经网络对输入内容进行简单分类所涉及的必要步骤是什么,例如,如果输入是“7”,输出将是:
>>> [0, 0, 0, 0, 0, 0, 0, 1, 0, 0]
我查看了 TensorFlow 文档,但未能提出解决方案。我怀疑这可能是因为教程中缺少某些内容。
谢谢
假设您已遵循 MNIST for ML Beginners Tutorial,要获得简单的预测,请添加一个 argmax 节点,如下所示:
prediction = tf.argmax(y, 1)
然后 运行 输入您要分类的数据:
prediction_val = sess.run(prediction, feed_dict={x: dataset.images})
prediction_val
的形状为 (batch_size,)
并且包含批次中每个图像最可能的标签。
请注意,feed_dict
仅包括 x
而不是 y_
,因为 prediction
不依赖于 y_
。