实验二:卷积神经网络
- 手写体识别
- 数据准备
使用MNIST数字图像训练卷积神经网络
数据重塑和标签向量化
- 建立基础卷积模型
卷积模型是Conv2D层和MaxPooling2D层的堆叠,本例中卷积神经网络处理大小为(28,28,1)的输入张量,这正是MNIST图像的格式
- 建立分类卷积模型
- 模型建立与训练
设置训练容器
优化算法、损失函数、监督矩阵
训练模型
指定输入、输出,指定迭代次数,指定数据块大小
- 结果测试
- 自主练习
- 改变网络的深度和宽度
| 深度 | 宽度 | 训练集精度 | 测试集精度 |
基准 | 3 | 64 | 0.9938
| 0.9919000267982483
|
深度不变,减小宽度 | 3 | 32 | 0.9920
| 0.9886000156402588
|
深度不变,增大宽度 | 3 | 128 | 0.9950
| 0.9922999739646912
|
宽度不变,减小深度 | 2 | 64 | 0.9954
| 0.9873999953269958
|
宽度不变,增大深度 | 4 | 64 | 0.9936
| 0.9891999959945679
|
由此可见,增大卷积神经网络的宽度,训练集和测试集上的精度都有所增加。改变深度会导致测试集上的精度均有所下降。
- 改变优化算法
优化算法 | 训练集精度 | 测试集精度 |
Sgd | 0.9986 | 0.9933000206947327 |
Adagrad | 0.9924 | 0.9912999868392944 |
Adadelta | 0.9944 | 0.9927999973297119 |
RMSprop | 0.9944 | 0.9918000102043152 |
Adam | 0.9934 | 0.9897000193595886 |
Adamax | 0.9922 | 0.9911000132560731 |
由此可见,sgd算法对于该问题最有效
- 猫、狗的二分类问题
- 数据准备
从数据目录中选取猫、狗的1000张、500张、500张图片分别作为训练数据、验证数据、测试数据,并建立相关目录进行存放。
- 数据预处理
将JPEG文件解码为RGB像素网格
将这些像素网格转换为浮点数向量
将像素值(0-255)缩放到[0,1]区间
- 模型建立
建立卷积层和池化层进行模型训练
使用分类层进行二分类猫狗图片
- 模型训练
使用批量生成器拟合模型
- 数据增强
数据增强是从现有的训练样本中生成更多的训练模型,其方法是利用多种能够生成可信图像的随机变换来增加样本。其目标是,模型在训练时不会两次查看完全相同的图像。这让模型能够观察到数据的更多内容,从而具有更好的泛化能力。
通过变换、旋转、压缩等来产生新的数据
- 随机丢弃
在模型中添加一个Dropout层,添加在密集连接分类器前
- 结果分析
- 预训练下的猫狗分类(不使用数据增强)
- 预训练模型
使用VGG16卷积网络提取特征
- 分类模型建立
- 模型建立与训练
设置训练容器
训练模型
- 结果展示
pytho