使用Tensorflow对手写数字进行分类

0
11218
图片作者 皮特·林福斯Pixabay

深度学习的功能之一是图像识别。用于机器学习和深度学习的对象识别的“ hello world”是用于手写数字识别的MNIST数据集。

来自MNIST数据集的样本数字

在本文中,我们将使用Keras对MNIST手写数字进行分类。

您可以从以下位置下载代码 谷歌 Colab.

广告Coursera Plus标语,包含约翰·霍普金斯大学,谷歌和密歇根大学的课程,突出显示数据科学职业发展的内容

MNIST手写数字的说明。

MNIST手写数字是一个数据集,用于评估关于手写数字分类问题的机器学习和深度学习模型,它是一个6万个小数字的28×28像素灰度图像的数据集,这些图像介于0到9之间。

导入TensorFlow库

import tensorflow as tf # Import tensorflow library
import matplotlib.pyplot as plt # Import matplotlib library

创建一个名为mnist的变量,并将其设置为Keras库中MNIST数据集的对象,然后我们将其解压缩为训练数据集 (x_train,y_train) and testing 数据set (x_test,y_test):

mnist = tf.keras.datasets.mnist # Object of the MNIST 数据set
(x_train, y_train),(x_test, y_test) = mnist.load_data() # Load 数据

预处理 data

为了确保正确导入我们的数据,我们将使用matplotlib从训练数据集中绘制第一个图像:

plt.imshow(x_train[0], cmap="gray") # Import the image
plt.show() # Plot the image
来自MNIST数据集的图像

在将数据输入到神经网络之前,我们需要通过在0到1而不是从0到255的范围内缩放像素值来对其进行归一化,这使得神经网络需要更少的计算能力:

# Normalize the train 数据set
x_train = tf.keras.utils.normalize(x_train, axis=1)
# Normalize the test 数据set
x_test = tf.keras.utils.normalize(x_test, axis=1)

建立 model

现在,我们将建立模型,或者换句话说,即将训练和学习如何对这些图像进行分类的神经网络。

值得注意的是,在构建人工神经网络时,图层是最重要的,因为它将提取数据的特征。

首先,我们首先创建一个模型对象,让您添加不同的图层。

其次,在这种情况下,我们将对数据进行展平。所以图像是28×28维,我们需要使其1×784维,因此神经网络的输入层可以读取或处理它。这是您需要知道的重要概念。

第三,我们定义输入和一个具有128个神经元的隐藏层以及一个激活函数,即 露露 功能。

最后,我们创建具有10个神经元和softmax激活函数的输出层,该函数将模型返回的分数转换为一个值,以便人类进行解释。

#Build the 模型 object
model = tf.keras.models.Sequential()
# Add the Flatten Layer
model.add(tf.keras.layers.Flatten())
# 建立 input and the hidden layers
model.add(tf.keras.layers.Dense(128, activation=tf.nn.relu))
model.add(tf.keras.layers.Dense(128, activation=tf.nn.relu))
# 建立 output layer
model.add(tf.keras.layers.Dense(10, activation=tf.nn.softmax))

编译 model

自完成神经网络构建以来,我们需要通过添加一些参数来编译模型,这些参数将告诉神经网络如何开始训练过程。

首先,我们添加优化器,该优化器将创建或换句话说更新神经网络的参数以适合我们的数据。

其次,损失函数将告诉您模型的性能。

第三,度量标准提供了模型质量的指示性检验。

# 编译 模型
model.compile(optimizer="adam", loss="sparse_categorical_crossentropy", metrics=["accuracy"])

训练 model

我们已经准备好训练模型了,我们将其称为fit子包,并为其提供训练数据和与训练数据集相对应的标记数据,以及应该运行多少个时期或应该进行多少次猜测。

模型.fit(x=x_train, y=y_train, epochs=5) # Start training process
训练过程

评估 model

让我们看看训练过程完成后模型的表现。

# 评估 模型 性能
test_loss, test_acc = 模型.evaluate(x=x_test, y=y_test)
# Print out the 模型 accuracy 
print('\nTest accuracy:', test_acc)
评估模型性能

结果表明神经网络的准确率达到了97.39%,这非常好,因为我们仅用5个时间段训练了模型。

作出预测

现在,我们将通过导入测试数据集图像开始进行预测。

predictions = 模型.predict([x_test]) # Make prediction

我们将对模型从未见过的数字或图像进行预测。 

例如,我们尝试预测与测试数据集中的图像编号1000相对应的编号:

print(np.argmax(predictions[1000])) # Print out the number
预测

如您所见,该预测是第九位,但是我们如何确保该预测是正确的呢?好吧,我们需要使用matplotlib在测试数据集中绘制图像编号1000:

plt.imshow(x_test[1000], cmap="gray") # Import the image
plt.show() # Show the image
正确的预测

恭喜,预测是正确的,也就是说我们的模型可以正确正确地对手写图像进行分类。

感谢您的阅读和“快乐编码❤️”


注意: 这是一个来宾帖子,本文中的观点属于来宾作者。如果您对发布的任何文章有任何疑问 请访问www.marktechpost.com,网址为: [电子邮件 protected]

广告

发表评论

请输入您的评论!
请在这里输入您的名字

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.