目录
实验六 卷积神经网络CNN框架的实现与应用
一、实验目的
二、实验原理
三、实验结果
1、调整学习率、epochs以及bacth_size这三个参数,分别观察参数的变化对于实验结果的影响。
2、最终的实验结果
3、采用3折交叉验证
四、实验总结
1、CNN算法步骤
2、设计程序流程图
3、试分析mnist数据集X_train、X_test以及相对应的Y_train、Y_test。
4、交叉验证及衡量指标部分代码:
5、实验过程中建立的Lenet5模型中各个参数及卷积核的个数见下图4.4,核心代码如下,具体代码见附件。
附录
源码
推荐文章
实验六 卷积神经网络CNN框架的实现与应用
一、实验目的
1、掌握卷积神经网络CNN的基本原理
2、利用CNN实现手写数字识别
二、实验原理
利用LeNet-5 CNN框架,实现手写数字识别。其中网络层级结构概述如图2所示,共有7层神经网络。在图2.1中,各网络层参数如下表2.1所示.
表2.1 各网络层参数设置对应表
Input layer | 输入数据为原始训练图像32*32 |
Conv1 | 6个5*5的卷积核,步长Stride为1 |
Pooling1 | 卷积核size为2*2,步长Stride为2 |
Conv2 | 12个5*5的卷积核,步长Stride为1 |
Pooling2 | 卷积核size为2*2,步长Stride为2 |
Output layer | 输出为10维向量 |
图2 CNN模型基本框架图
本次实验采用minst数据集,初始图像大小为28*28,采用下表2.2参数搭建CNN模型。
表2.2 各网络层参数设置对应表
Input layer | 输入数据为原始训练图像28*28 |
Conv1 | 6个5*5的卷积核,步长Stride为1 |
Pooling1 | 卷积核size为2*2,步长Stride为2 |
Conv2 | 16个5*5的卷积核,步长Stride为1 |
Pooling2 | 卷积核size为2*2,步长Stride为2 |
Flatten() | 一个重新调整为 1D 的张量。 |
Dense(120, activation='tanh') | 全连接层 |
Dense(84, activation='tanh') | 全连接层 |
Dense(10, activation='softmax') | 输出为10维向量 |
三、实验结果
注:由于添加交叉验证会导致训练时间边长,这里采用先确定合适参数再进行交叉验证训练
衡量实验结果的常用指标如下:
检测率:
查全率:
准确率:
1、调整学习率、epochs以及bacth_size这三个参数,分别观察参数的变化对于实验结果的影响。
(1)固定参数epochs = 3,batch_size = 128,观察学习率对于正确率的影响,可以发现随着学习率由0.0001逐渐增大时,准确率及其他评价指标都是先上升后下降,运行时间受学习率的影响不大,变化图见图3.1.1,具体结果见表3.1.1。
图3.1.1 学习率对于准确率的影响
表3.1.1 学习率对于准确率的影响
| 学习率 | ||||
0.0001 | 0.001 | 0.01 | 0.1 | 1 | |
运行时间(s) | 24.57 | 25.63 | 25.34 | 25.39 | 25.13 |
准确率 | 87.67% | 98.07% | 98.06% | 51. 95% | 74.33% |
查全率 | 44.78% | 83.86% | 84.00% | 16.62% | 10.83% |
检测率 | 99.76% | 99.88% | 99.64% | 94.73% | 21.67% |
F1值 | 0.61 | 0.91 | 0.91 | 0.28 | 0.14 |
(2)固定参数learning_rate=0.001, batch_size = 128,观察epochs对于准确率的影响。
表3.1.2 epochs对于准确率的影响
| epochs | ||||
1 | 3 | 5 | 7 | 9 | |
运行时间(s) | 10.09 | 25.51 | 42.63 | 60.47 | 75.75 |
准确率 | 67.21% | 91.89% | 95.96% | 97.40% | 98.28% |
查全率 | 23.34% | 55.24% | 71.31% | 79.43% | 95.39% |
检测率 | 99.78% | 99.78% | 99.87% | 99.94% | 99.95% |
F1值 | 0.37 | 0.71 | 0.83 | 0.88 | 0.92 |
图3.1.2 epochs对于准确率的影响
(3)固定参数learning_rate=0.001,epochs=5,观察batch_size对于准确率的影响。
表3.1.3 batch_size对于准确率的影响
| batch_size | ||||
108 | 118 | 128 | 138 | 148 | |
运行时间(s) | 42.85 | 44.01 | 41.20 | 41.93 | 41.82 |
准确率 | 93.69% | 96.53% | 97.48% | 97.93% | 98.22% |
查全率 | 61.35% | 74.31% | 79.95% | 82.94% | 85.02% |
检测率 | 99.83% | 99.87% | 99.89% | 99.88% | 99.88% |
F1值 | 0.76 | 0.85 | 0.88 | 0.90 | 0.91 |
图3.1.3 batch_size对于准确率的影响
2、最终的实验结果
选取参数learning_rate=0.001, batch_size = 148,epochs=5,具体的实验结果如表3.2所示:
表3.2 最终实验结果
检测率 | 查全率 | 准确率 | F1值 |
99.88% | 85.02% | 98.22% | 0.91 |
3、采用3折交叉验证
选取参数learning_rate=0.001, batch_size = 148,epochs=5,具体的实验结果如表3.3所示:
表3.3 最终实验结果
检测率 | 查全率 | 准确率 | F1值 |
99.85% | 89.50% | 98.79% | 0.94 |
四、实验总结
1、CNN算法步骤
Step1 获取训练数据和测试数据;
Step2 定义网络层级结构;
Step3 初始设置网络参数(权重W,偏向b)cnnsetup(cnn, train_x, train_y)
Step4训练超参数opts定义(学习率,batchsize,epoch)
Step5网络训练之前向运算cnnff(net, batch_x)
Step6 网络训练之反向传播cnnbp(net, batch_y)
Step7 网络训练之参数更新cnnapplygrads(net, opts)
Step8 重复Step5 Step6 Step7,直至满足epoch
Step9 网络测试cnntest(cnn, test_x, test_y)
2、设计程序流程图
图4.2 程序流程图
3、试分析mnist数据集X_train、X_test以及相对应的Y_train、Y_test。
表4.3 数据集分析表
| X_train | X_test | Y_train | Y_test |
原始数据shape | 60000*28*28 | 10000*28*28 | 60000*1 | 10000*1 |
处理后shape | 60000*28*28*1 | 10000*28*28*1 | 60000*10 | 10000*10 |
4、交叉验证及衡量指标部分代码:
注:由于添加交叉验证会导致训练时间边长,这里采用先确定合适参数再进行交叉验证训练。
|
5、实验过程中建立的Lenet5模型中各个参数及卷积核的个数见下图4.4,核心代码如下,具体代码见附件。
|
图4.5 模型参数的设置
附录
- np_utils.to_categorical使用方法: 12.html