神经网络基础篇十

164 阅读3分钟

承接上文神经网络基础篇九

卷积神经网络做分类任务

  • 导入类库

image.png

  • 设置参数

    image.png

    image.png

读取数据并预处理

image.png

准备数据集

image.png

建立卷积神经网络

image.png

image.png

  • inputShape表示第一层输入图片数据的h w c ,后续层就不需要指定了
  • 3,3是卷积核大小,用非常小的卷积核和非常多的卷积层去做特征提取
  • 32表示32个不同的卷积核
  • padding=same表示需要边界填充
  • 卷积完之后所有带参数计算的层(卷积层、全连接层)都会连接激活函数

接下来创建卷积层 对数据进行卷积和特征提取

image.png

Conv1D主要对文本和数值做卷积

image.png

Conv2D主要对特征图做卷积

image.png

  • 每一个2x2的区域做一个池化的操作

VGG所有卷积都是3x3的,pooling把特征图压缩,长和宽都压缩为原来的1/2,体积则压缩为原来的1/4,所以会损失一部分特征信息,怎么弥补损失?池化后,特征图翻倍,所以特征图个数由32->64->128

image.png

卷积完之后,得到一个三维的特征图,需要拉长成一维的数据

image.png

  • 全连接层512个神经元

image.png

正常VGG都是3层的,也可以再加一层

image.png

分类

image.png

设置损失函数

image.png

  • decay使得学习率下降,因为权重参数一开始是随机生成的,先学的差不多了,再慢慢去调学习率。

  • 优化器SGD

    image.png

    SGD里面代码image.png

每个epoch完之后,都会动态的衰减学习率

模型训练

image.png

训练的结果

image.png

训练集表现的好,验证集表现的差,最本质原因是数据量太小了,过拟合了,所以也正常,一般最小也以万为单位,几万都不够的。

调优

  • BatchNormalization

image.png

image.png

一开始做了一些标准化处理,随着网络迭代的进行,每一层学完之后,可能是参差不齐,可能有的偏大,有的偏小,需要对每一层矫正,相当于对每一层的结果再做类似的标准化,卷积和全连接层做完之后都可以做一些矫正。

image.png

右边的结果显示loss下降的过程稍微稳定了一些。loss值为4是因为权重一开始是随机初始化产生的导致的。

再训练一次的结果:

image.png

使用BatchNormalization前后效果对比

image.png

可以看到验证集的准确度提高了,由0.6提高到0.7。

使用截断高斯分布初始化权重参数,

image.png

卷积和全连接都加上这个参数配置,效果对比

image.png

将TruncateNormal的标准差设置的小一些比如调整为0.02,让每个参数发挥的作用更小一些,使得范化能力更平稳一些。

Dropout

Dropout参数可以添加在卷积层也可以添加在全连接层,但卷积层权重参数都能共享,本来就没有几个参数,所以卷积层就不必要添加Dropout参数了image.png

训练得到的模型

image.png

模型预测

  • 参数配置

image.pngimage.png

卷积神经网络不需要flatten拉平参数

  • 参数初始化、读取数据

image.png

预处理和预测数据

image.png

绘画预测结果

image.pngimage.png

image.pngimage.png

用卷积神经网络预测图片分类比传统的神经网络的效果更好。