摘要:本文介绍了使用Keras框架在TensorFlow上构建卷积神经网络(CNN)处理MNIST手写数字识别的完整流程。
首先加载并预处理数据,包括维度调整、归一化和独热编码;然后构建包含两个卷积层、池化层、Dropout层和全连接层的序贯模型;接着使用交叉熵损失和Adam优化器编译模型;经过10轮训练后,模型在测试集上达到99.1%的准确率。
整个过程展示了Keras简化深度学习模型开发的优势,包括直观的API设计、灵活的层配置和高效的训练流程。
目录
style="margin-left:0px">TensorFlow——Keras
框架
style="margin-left:120px">步骤一:加载并预处理数据
style="margin-left:120px">步骤二:定义模型架构
style="margin-left:120px">步骤三:编译模型
style="margin-left:120px">步骤四:训练模型
style="margin-left:80px">术语备注
框架
Keras
框架之上。
该库的设计核心是帮助开发者理解深度学习相关技术,比如为神经网络搭建网络层,同时兼顾维度形态与数学细节的相关概念。
Keras
可搭建的模型框架主要分为以下两种类型:
- 序贯式
API)
利用Keras
构建深度学习模型的八大步骤
- 加载数据
- 对加载的数据进行预处理
- 定义模型结构
- 编译模型
- 训练模型
- 评估模型性能
- 执行所需的预测任务
- 保存模型
本文将使用
Jupyter
笔记本完成代码运行与结果输出,具体操作步骤如下:
步骤一:加载并预处理数据
这是运行深度学习模型的首要步骤,先导入相关库和模块,再完成数据的加载与预处理。
importwarnings
warnings.filterwarnings('ignore')
import
加载已打乱的MNIST手写数字数据集,划分为训练集和测试集
(X_train,
X_train.reshape(X_train.shape[0],
28,
X_test.reshape(X_test.shape[0],
28,
X_train.astype('float32')
X_test
X_test.astype('float32')
X_train
np_utils.to_categorical(y_train,
10)
np_utils.to_categorical(y_test,
10)
步骤二:定义模型架构
采用序贯式模型搭建卷积神经网络结构:
model=
添加卷积层,32个3×3卷积核,激活函数为ReLU,指定输入维度为28×28×1
model.add(Conv2D(32,
添加最大池化层,2×2池化窗口,降维并保留关键特征
=
添加Dropout层,随机丢弃25%的神经元,防止过拟合
展平层,将多维特征映射为一维,连接卷积层与全连接层
model.add(Flatten())
全连接层,128个神经元,激活函数为ReLU
model.add(Dense(128,
再次添加Dropout层,随机丢弃50%的神经元,进一步防止过拟合
输出层,10个神经元,softmax激活函数,输出各分类的概率
model.add(Dense(10,
'softmax'))
步骤三:编译模型
配置模型的损失函数、优化器和评估指标,为训练做准备:
#损失函数选用交叉熵损失,优化器为Adam,评估指标为准确率
model.compile(loss
'categorical_crossentropy',
optimizer
['accuracy'])
步骤四:训练模型
使用训练集数据对模型进行训练,设置训练参数:
#批次大小32,训练轮数10,显示训练过程
model.fit(X_train,
1)
训练过程的迭代输出结果如下:
plaintext
第1轮/共10轮60000/60000
[==============================]
65s
[==============================]
62s
[==============================]
58s
[==============================]
62s
[==============================]
62s
[==============================]
59s
[==============================]
61s
[==============================]
63s
[==============================]
64s
[==============================]
60s
准确率:0.9910
术语备注
- Sequential
Keras
中最简单的模型构建方式,适用于层与层之间依次连接的线性模型
- Functional
API,更灵活的模型构建方式,可搭建多输入、多输出、带残差连接的复杂网络
- one-hot
encoding
:独热编码,将离散型标签转换为二进制向量,避免标签间的数值大小干扰模型训练 - Dropout:随机失活,深度学习中常用的正则化方法,通过随机丢弃部分神经元,解决模型过拟合问题
- Adam:一种自适应学习率优化器,结合了动量法和
RMSprop
的优点,收敛速度快且稳定性好
- softmax:归一化指数函数,将神经网络的输出转换为
0-1
1,适用于多分类任务



