上QQ阅读APP看书,第一时间看更新
AI源码解读.数字图像处理案例:Python版
4.3.2 模型编译主体
序贯模型是函数式模型的简略版,为最简单的线性、从头到尾的结构顺序,不分叉,是多个网络层的线性堆叠。Keras实现了很多层,包括核心层、卷积层、池化层等非常丰富有趣的网络结构。本项目通过将层的列表传递给构造函数,创建序贯模型。在完成对下载数据集中的图像预处理后,用作该模型的训练集、测试集和验证集。鉴于目标域和源域中的数据特征相同,且源域中的数据比目标域中的数据更丰富,可以使用基于ImageNet训练出的VGG-16模型,并根据需要,对模型参数做适当修改。具体实现过程如下:
1.定义模型结构
在搭建神经网络时,使用VGG-16模型的特征参数,将最后一层卷积层的输出直接输入该模型中,并在此模型上添加一个全局平均池化层和一个全连接层。其中,全连接层使用了softmax激活函数。本项目使用的神经网络模型共有68229个参数。获取链接为https://s3-us-west-1.amazonaws.com/udacity-aind/dog-project/DogVGG16Data.npz,如图4-3所示。
在VGG-16模型后添加全局池化层和全连接层,并通过函数VGG-16_model.summary()输出结构信息,如图4-4所示。
图4-3 VGG-16模型结构
图4-4 全局池化层和全连接层结构
2.损失函数及模型优化
相比Flatten,GlobalAveragePooling2D可以大量减少模型参数,降低过拟合的风险,同时降低计算成本,这也是现在主流的一些CNN架构做法。在此基础上为了防止过拟合现象的产生,全连接层之前加入BatchNormalization层。