用了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. 使用测试集评估模型性能,并打印出测试准确率。
相关推荐
hxxjxw15 小时前
Pytorch分布式训练/多卡训练(六) —— Expert Parallelism (MoE的特殊策略)
人工智能·pytorch·python
Robot侠15 小时前
视觉语言导航从入门到精通(一)
网络·人工智能·microsoft·llm·vln
掘金一周15 小时前
【用户行为监控】别只做工具人了!手把手带你写一个前端埋点统计 SDK | 掘金一周 12.18
前端·人工智能·后端
神州问学15 小时前
世界模型:AI的下一个里程碑
人工智能
zhaodiandiandian15 小时前
AI深耕产业腹地 新质生产力的实践路径与价值彰显
人工智能
古德new15 小时前
openFuyao AI大数据场景加速技术实践指南
大数据·人工智能
youcans_15 小时前
【医学影像 AI】FunBench:评估多模态大语言模型的眼底影像解读能力
论文阅读·人工智能·大语言模型·多模态·眼底图像
dagouaofei15 小时前
PPT AI生成实测报告:哪些工具值得长期使用?
人工智能·python·powerpoint
蓝桉~MLGT15 小时前
Ai-Agent学习历程—— Agent认知框架
人工智能·学习
视觉&物联智能15 小时前
【杂谈】-边缘计算竞赛:人工智能硬件缘何超越云端
人工智能·ai·chatgpt·aigc·边缘计算·agi·deepseek