用了Keras来构建一个卷积神经网络对MNIST数据集进行分类

首先导入所需库和模块,然后加载MNIST手写数字数据集并对数据进行预处理。接着定义了一个基于卷积神经网络(CNN)的模型,该模型包含多个卷积层、最大池化层以及Dropout层作为正则化手段。模型最后接一个全连接层作为输出层,使用softmax激活函数处理多分类任务。

模型编译阶段设置了损失函数为"categorical_crossentropy",优化器为Adam,评估指标为准确率。之后使用训练数据对模型进行训练,并在测试集上评估模型的性能,最终输出测试集上的准确率。

python 复制代码
from __future__ import absolute_import  # 绝对导入,确保导入的模块是绝对路径下的
from __future__ import division         # 导入除法运算的未来版本特性
from __future__ import print_function   # 导入打印函数的未来版本特性

import numpy as np
from keras.models import Sequential
from keras.optimizers import RMSprop
from keras.layers import Activation, Dense, Dropout
from keras.layers import Conv2D, MaxPooling2D, Flatten
from keras.utils import to_categorical, plot_model
from tensorflow.keras.datasets import mnist

# 加载MNIST数据集
(x_train, y_train), (x_test, y_test) = mnist.load_data()

# 计算标签的数量
num_labels = len(np.unique(y_train))

# 将标签转换为 one-hot 向量
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)

# 图像输入尺寸
image_size = x_train.shape[1]
# 调整尺寸并进行归一化
x_train = np.reshape(x_train, [-1, image_size, image_size, 1])
x_test = np.reshape(x_test, [-1, image_size, image_size, 1])
x_train = x_train.astype('float32') / 255
x_test = x_test.astype('float32') / 255

# 网络参数
# 图像按原样处理(方形灰度图)
input_shape = (image_size, image_size, 1)
batch_size = 128
kernel_size = 3
pool_size = 2
filters = 64
dropout = 0.2

# 模型是CNN-ReLU-MaxPooling的堆叠
model = Sequential()
model.add(Conv2D(filters=filters,
                 kernel_size=kernel_size,
                 activation='relu',
                 input_shape=input_shape))
model.add(MaxPooling2D(pool_size))
model.add(Conv2D(filters=filters,
                 kernel_size=kernel_size,
                 activation='relu'))
model.add(MaxPooling2D(pool_size))
model.add(Conv2D(filters=filters,
                 kernel_size=kernel_size,
                 activation='relu'))
model.add(Flatten())
# 添加 dropout 作为正则化器
model.add(Dropout(dropout))
# 输出层是10维的 one-hot 向量
model.add(Dense(num_labels))
model.add(Activation('softmax'))
model.summary()

# 如果可以安装 pydot,则启用此功能
# pip install pydot
#plot_model(model, to_file='cnn-mnist.png', show_shapes=True)

# 用于 one-hot 向量的损失函数
# 使用 Adam 优化器
# 精度是分类任务的好指标
model.compile(loss='categorical_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])
# 训练网络
model.fit(x_train, y_train, epochs=10, batch_size=batch_size)

_, acc = model.evaluate(x_test,
                        y_test,
                        batch_size=batch_size,
                        verbose=0)
print("\nTest accuracy: %.1f%%" % (100.0 * acc))

这段代码的主要步骤包括:

  1. 导入所需的模块。
  2. 加载MNIST数据集并进行预处理,包括将标签转换为 one-hot 向量,并将图像像素值归一化到 [0, 1] 区间。
  3. 定义了网络的参数,包括输入图像的尺寸、批处理大小、卷积核大小、池化大小等。
  4. 构建了一个简单的卷积神经网络模型,包括卷积层、ReLU激活函数、池化层、Dropout正则化层以及输出层。
  5. 编译模型,指定损失函数、优化器和评估指标。
  6. 使用训练集训练模型。
  7. 使用测试集评估模型性能,并打印出测试准确率。
相关推荐
余生H20 分钟前
transformer.js(三):底层架构及性能优化指南
javascript·深度学习·架构·transformer
果冻人工智能39 分钟前
2025 年将颠覆商业的 8 大 AI 应用场景
人工智能·ai员工
代码不行的搬运工40 分钟前
神经网络12-Time-Series Transformer (TST)模型
人工智能·神经网络·transformer
石小石Orz42 分钟前
Three.js + AI:AI 算法生成 3D 萤火虫飞舞效果~
javascript·人工智能·算法
罗小罗同学1 小时前
医工交叉入门书籍分享:Transformer模型在机器学习领域的应用|个人观点·24-11-22
深度学习·机器学习·transformer
孤独且没人爱的纸鹤1 小时前
【深度学习】:从人工神经网络的基础原理到循环神经网络的先进技术,跨越智能算法的关键发展阶段及其未来趋势,探索技术进步与应用挑战
人工智能·python·深度学习·机器学习·ai
阿_旭1 小时前
TensorFlow构建CNN卷积神经网络模型的基本步骤:数据处理、模型构建、模型训练
人工智能·深度学习·cnn·tensorflow
羊小猪~~1 小时前
tensorflow案例7--数据增强与测试集, 训练集, 验证集的构建
人工智能·python·深度学习·机器学习·cnn·tensorflow·neo4j
极客代码1 小时前
【Python TensorFlow】进阶指南(续篇三)
开发语言·人工智能·python·深度学习·tensorflow
zhangfeng11331 小时前
pytorch 的交叉熵函数,多分类,二分类
人工智能·pytorch·分类