实践机器学习 — 利用 MNIST 数据集构建一个识别手写数字的模型
2023-11-12 21:17:17
当学习编程时,第一步往往是学习打印“Hello World”。
同样,机器学习领域的入门通常从 MNIST 数据集开始。这个数据集包括成千上万张手写数字的图片,每张图片都贴上了相应的标签,以帮助模型识别数字。
我们能训练一个简单的手写数字识别模型。一起来了解它是如何实现的吧!
1. 认识 MNIST 数据集
MNIST 数据集是一个包含 70,000 张手写数字图片的数据集,其中 60,000 张用于训练模型,10,000 张用于测试模型的准确性。每张图片都是 28x28 像素的灰度图像,也就是说,每个像素值在 0 到 255 之间。
2. 设置 TensorFlow 环境
为了使用 TensorFlow,您需要在您的计算机上安装它。可以从 TensorFlow 网站下载并安装相应的版本。
pip install tensorflow
3. 导入所需库
在 Python 脚本中,导入 TensorFlow 和其他必要的库。
import tensorflow as tf
import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Flatten, Dense, Dropout
4. 加载 MNIST 数据集
使用 tf.keras.datasets.mnist
加载 MNIST 数据集。
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
x_train
和 y_train
分别是训练数据和训练标签,x_test
和 y_test
分别是测试数据和测试标签。
5. 预处理数据
在训练模型之前,需要对数据进行一些预处理。首先,将数据归一化到 0 到 1 之间。其次,将标签转换为独热编码。
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0
y_train = tf.keras.utils.to_categorical(y_train, 10)
y_test = tf.keras.utils.to_categorical(y_test, 10)
6. 构建模型
使用 tf.keras.models.Sequential
创建一个简单的模型。该模型包含两个隐藏层,每个隐藏层有 128 个神经元,并且使用 relu
激活函数。
model = Sequential([
Flatten(input_shape=(28, 28)),
Dense(128, activation='relu'),
Dropout(0.2),
Dense(128, activation='relu'),
Dropout(0.2),
Dense(10, activation='softmax')
])
7. 编译模型
使用 tf.keras.models.Model.compile
编译模型。指定优化器、损失函数和评估指标。
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
8. 训练模型
使用 tf.keras.models.Model.fit
训练模型。指定训练数据、训练标签、训练轮数和验证数据。
model.fit(x_train, y_train, epochs=10, validation_data=(x_test, y_test))
9. 评估模型
使用 tf.keras.models.Model.evaluate
评估模型的准确性。
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])
经过训练,模型在测试集上的准确率应超过 90%。
现在,您已经成功构建了一个简单的数字识别模型!