手写数字识别:MNIST 数据集加载与预处理
本教程将带你使用 TensorFlow 加载和预处理 MNIST 手写数字数据集,并进行模型训练和评估。
1. 获取手写数字数据集
首先,我们需要使用 TensorFlow 中的 mnist.load_data() 函数获取 MNIST 数据集。该数据集包含 60,000 张训练图像和 10,000 张测试图像。每张图像都是一个 28x28 像素的灰度图像,表示一个手写数字。
import tensorflow as tf
import numpy as np
from tensorflow.keras.datasets import mnist
# 获取手写数字数据集
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
2. 数据预处理
在进行模型训练之前,我们需要对数据进行预处理。
- 维度调整: MNIST 数据集中的图像维度为
(28, 28),我们需要将其调整为(28, 28, 1),以便将其输入到神经网络模型中。
# 训练集数据维度的调整:N H W C
train_images = np.reshape(train_images, (train_images.shape[0], train_images.shape[1], train_images.shape[2], 1))
# 测试集数据维度的调整:N H W C
test_images = np.reshape(test_images, (test_images.shape[0], test_images.shape[1], test_images.shape[2], 1))
- 数据缩放: 将图像数据缩放到 0 到 1 之间,可以提高模型的训练效率。
train_images = train_images.astype('float32') / 255.0
test_images = test_images.astype('float32') / 255.0
3. 创建模型
我们使用 TensorFlow 的 keras 模块创建一个简单的卷积神经网络模型。
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
# 创建模型
net = Sequential()
# 卷积层
net.add(Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))
net.add(MaxPooling2D((2, 2)))
# 全连接层
net.add(Flatten())
net.add(Dense(10, activation='softmax'))
4. 模型训练
使用训练数据训练模型,并使用验证集评估模型的性能。
# 指定优化器,损失函数和评价指标
optimizer = tf.keras.optimizers.SGD(learning_rate=0.01, momentum=0.0)
net.compile(optimizer=optimizer, loss='sparse_categorical_crossentropy', metrics=['accuracy'])
# 模型训练:指定训练数据,batchsize,epoch,验证集
net.fit(train_images, train_labels, batch_size=128, epochs=3, verbose=1, validation_split=0.1)
5. 模型评估
使用测试数据评估模型的性能。
# 指定测试数据
net.evaluate(test_images, test_labels, verbose=1)
总结
本教程演示了如何使用 TensorFlow 加载和预处理 MNIST 手写数字数据集,并训练一个简单的卷积神经网络模型。通过这些步骤,你可以开始进行手写数字识别任务。
注意: 代码中的 net 变量需要提前定义,它代表你创建的卷积神经网络模型。
希望本教程对你有所帮助!
原文地址: https://www.cveoy.top/t/topic/pdzs 著作权归作者所有。请勿转载和采集!