什么是神经网络:实战-使用CNN进行minst手写数据集分类

发布于 2025-8-12 06:36
浏览
0收藏

就像无数人从敲下“Hello World”开始代码之旅一样,许多研究员从“MNIST数据集”开启了人工智能的探索之路。MNIST数据集(Mixed National Institute of Standards and Technology database)是一个用来训练各种图像处理系统的二进制图像数据集,广泛应用于机器学习中的训练和测试。MNIST数据集共有70000张图像,其中训练集60000张,测试集10000张。所有图像都是28×28的灰度图像,每张图像包含一个手写数字。每张图像都有标注。共10个类别,每个类别代表0~9之间的一个数字,每张图像只有一个类别。

什么是神经网络:实战-使用CNN进行minst手写数据集分类-AI.x社区

 今天就让我们用卷积神经网络CNN来进行minst手写数据集分类吧~

 下面是用卷积神经网络(CNN)来对MNIST数据集进行分类的完整示例。每一段代码之后我都会详细解释其功能。

一. 导入必要的库

import tensorflow as tf

from tensorflow.keras import layers, models

from tensorflow.keras.datasets import mnist

from tensorflow.keras.utils import to_categorical

代码解释:‍‍‍‍‍

1. tensorflow:导入TensorFlow库,提供机器学习和深度学习的功能。

2. layers, models:从Keras中导入层和模型的构建模块。

3. mnist:从Keras中导入MNIST数据集。

4. to_categorical:用于将标签转换为one-hot编码。

二.  加载MNIST数据集

(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

代码解释:

1. mnist.load_data():加载MNIST数据集,返回训练和测试数据的元组。MNIST数据集由28x28像素的灰度手写数字图像组成。

2. train_images, train_labels:训练数据和对应的标签。

3. test_images, test_labels:测试数据和对应的标签。

三. 数据预处理

train_images = train_images.reshape((60000, 28, 28, 1)).astype('float32') / 255

test_images = test_images.reshape((10000, 28, 28, 1)).astype('float32') / 255

train_labels = to_categorical(train_labels)

test_labels = to_categorical(test_labels)

代码解释:

1. reshape((60000, 28, 28, 1)):将训练和测试图像调整为4D张量,以便适用于CNN输入。`(样本数, 高度, 宽度, 通道数)`。

2. astype('float32') / 255:将像素值归一化到0到1之间,以提高模型训练效率。

3. to_categorical():将整数标签转换为one-hot编码,以便于多类分类任务。

四. 构建卷积神经网络模型

model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activatinotallow='relu', input_shape=(28, 28, 1)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activatinotallow='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activatinotallow='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(64, activatinotallow='relu'))
model.add(layers.Dense(10, activatinotallow='softmax'))

代码解释:

1. models.Sequential():创建一个顺序模型,这意味着模型的层按顺序堆叠。

2. Conv2D(32, (3, 3), activatinotallow='relu', input_shape=(28, 28, 1)):

  • 32:卷积核的数量。
  • (3, 3):卷积核的大小。
  • activatinotallow='relu':使用ReLU激活函数。
  • input_shape=(28, 28, 1):输入的形状。

3. MaxPooling2D((2, 2)):最大池化层,使用2x2的窗口来减少空间维度。

4. Flatten():将多维输入展平成一维,以便于全连接层处理。

5. Dense(64, activatinotallow='relu'):全连接层,具有64个神经元和ReLU激活函数。

6. Dense(10, activatinotallow='softmax'):输出层,具有10个神经元(对应10个类别)和softmax激活函数,用于多类分类。

五.  编译模型

model.compile(optimizer='adam',

              loss='categorical_crossentropy',

              metrics=['accuracy'])

代码解释:

1. optimizer='adam':使用Adam优化器进行训练。

2. loss='categorical_crossentropy':使用分类交叉熵作为损失函数。

3. metrics=['accuracy']:评估模型时关注的指标是准确率。

六. 训练模型

model.fit(train_images, train_labels, epochs=5, batch_size=64)

代码解释:

1. fit(train_images, train_labels, epochs=5, batch_size=64):

2. epochs=5:训练整个数据集5次。

3. batch_size=64:每次使用64个样本进行梯度更新。

七. 评估模型

test_loss, test_acc = model.evaluate(test_images, test_labels)

print(f"Test accuracy: {test_acc}")

代码解释:

1. evaluate(test_images, test_labels):在测试数据上评估模型性能。

2. test_acc:测试集的准确率。

本文转载自​​人工智能训练营​​,作者:人工智能训练营


收藏
回复
举报
回复
相关推荐