本教程将带你使用 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. 数据预处理

在进行模型训练之前,我们需要对数据进行预处理。

  1. 维度调整: 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))
  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 变量需要提前定义,它代表你创建的卷积神经网络模型。

希望本教程对你有所帮助!

手写数字识别:MNIST 数据集加载与预处理

原文地址: https://www.cveoy.top/t/topic/pdzs 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录