Inception模型思想详解及核心代码实现

更新时间:2023-06-23 22:17:26 阅读: 评论:0

Inception模型思想详解及核⼼代码实现
摘要
Inception ⽹络是 CNN 分类器发展史上⼀个重要的⾥程碑。在 Inception 出现之前,⼤部分流⾏ CNN 仅仅是把卷积层堆叠得越来越多,使⽹络越来越深,以此希望能够得到更好的性能。但是越深的模型存在⼀些问题:1是在训练数据集有限的情况下,参数太多,容易过拟合。2是⽹络越⼤计算复杂度越⼤,难以应⽤。3是⽹络越深,梯度越往后穿越容易消失(梯度消失),难以优化模型。因此,Inception模型在这样的情况下应运⽽⽣。
Inception模型的实现思想
⼀句化:复⽤更多特征,⽽⾮⽬标于精准化特征提取。提⾼特征张量宽度,提⾼对特征的囊括性。
问题:
图像中突出部分的⼤⼩差别很⼤。例如,狗的图像可以是以下任意情况。每张图像中狗所占区域都是不同的。
从左到右:狗占据图像的区域依次减⼩
由于信息位置的巨⼤差异,为卷积操作选择合适的卷积核⼤⼩就⽐较困难。信息分布更全局性的图像偏好较⼤的卷积核,信息分布⽐较局部的图像偏好较⼩的卷积核。⾮常深的⽹络更容易过拟合。将梯度更新传输到整个⽹络是很困难的。简单地堆叠较⼤的卷积层⾮常消耗计算资源。
解决⽅案:
为什么不在同⼀层级上运⾏具备多个尺⼨的滤波器呢?⽹络本质上会变得稍微宽⼀些,⽽不是更深⼀些。作者因此设计了 Inception 模块。
下图是「原始」Inception 模块。它使⽤ 3 个不同⼤⼩的滤波器(1x1、3x3、5x5)对输⼊执⾏卷积操作,此外它还会执⾏最⼤池化。所有⼦层的输出最后会被级联起来,并传送⾄下⼀个 Inception 模块
Inception模块的初始想法
如前所述,深度神经⽹络需要耗费⼤量计算资源。为了降低算⼒成本,作者在 3x3 和 5x5 卷积层之前添加额外的 1x1 卷积层,来限制输⼊信道的数量。尽管添加额外的卷积操作似乎是反直觉的,但是 1x1 卷积⽐ 5x5 卷积要廉价很多,⽽且输⼊信道数量减少也有利于降低算⼒成本。不过⼀定要注意,1x1 卷积是在最⼤池化层之后,⽽不是之前。
因此,Inception模块原始初始层还包含两个主要附加组件:
在之前添加1×1的卷积层,主要⽤于降维。
并⾏的最⼤池化层,为初始层提供了另⼀个选项。
在深度学习领域,有很多⼩的操作⽅法可以提⾼增⾼模型的准确率及泛化性能,例如:分解卷积及正则化;RMSProp 优化器;Dropout;辅助分类器使⽤了 BatchNorm;标签平滑(添加到损失公式的⼀种正则化项,旨在阻⽌⽹络对某⼀类别过分⾃信,即阻⽌过拟合);引⼊残差连接;GPU并⾏运⾏等相关⼩的优化思想。
berth基于以上思考,Inception模型之后⼜衍⽣出了很多版本,例如InceptionV1、InceptionV2、InceptionV3、InceptionV4;Inception模型的代码实现
实现环境:
python3.6.5、tensorflow 1.1.8、keras 2.2.0等。
四六级准考证号查询网核⼼代码
本⽂将给出keras神经⽹络编程框架实现的⼀个简单Inception模型。webhosting
def inception_module(layer_in, f1, f2_in, f2_out, f3_in, f3_out, f4_out):
conv1 = Conv2D(f1, (1,1), padding='same', activation='relu')(layer_in)
conv3 = Conv2D(f2_in, (1,1), padding='same', activation='relu')(layer_in)
steel gratingconv3 = Conv2D(f2_out, (3,3), padding='same', activation='relu')(conv3)
conv5 = Conv2D(f3_in, (1,1), padding='same', activation='relu')(layer_in)
conv5 = Conv2D(f3_out, (5,5), padding='same', activation='relu')(conv5)
pool = MaxPooling2D((3,3), strides=(1,1), padding='same')(layer_in)
pool = Conv2D(f4_out, (1,1), padding='same', activation='relu')(pool)
# concatenate filters, assumes filters/channels last
layer_out = concatenate([conv1, conv3, conv5, pool], axis=-1)
return layer_out
模型参数:
_____________________________________________________________________________________
Layer (type)                    Output Shape        Param #    Connected to
==================================================================================================
input_1 (InputLayer)            [(None, 256, 256, 3) 0opus
__________________________________________________________________________________________________
conv2d_1 (Conv2D)              (None, 256, 256, 96) 384        input_1[0][0]
__________________________________________________________________________________________________
conv2d_3 (Conv2D)              (None, 256, 256, 16) 64          input_1[0][0]
__________________________________________________________________________________________________
max_pooling2d (MaxPooling2D)    (None, 256, 256, 3)  0          input_1[0][0]
__________________________________________________________________________________________________gaim
conv2d (Conv2D)                (None, 256, 256, 64) 256        input_1[0][0]
__________________________________________________________________________________________________
conv2d_2 (Conv2D)              (None, 256, 256, 128 110720      conv2d_1[0][0]
__________________________________________________________________________________________________
conv2d_4 (Conv2D)              (None, 256, 256, 32) 12832      conv2d_3[0][0]
__________________________________________________________________________________________________
conv2d_5 (Conv2D)              (None, 256, 256, 32) 128        max_pooling2d[0][0]
__________________________________________________________________________________________________
concatenate (Concatenate)      (None, 256, 256, 256 0          conv2d[0][0]
conv2d_2[0][0]
beautiful dance
conv2d_4[0][0]
conv2d_5[0][0]
==================================================================================================
Total params: 124,384
Trainable params: 124,384
Non-trainable params: 0
__________________________________________________________________________________________________
模型⽹络结构:
电影分类
总结
短裤用英语怎么说平衡⽹络的宽度和深度。⽹络的优化表现可以通过平衡每阶段的过滤器数量和⽹络深度实现。同时提⾼宽度和深度可以提⾼⽹络质量,但是只有并⾏提⾼时才能对计算常量优化提升。从以上对Inception模型的思想来源的总结,我们不难发现⼀些优化深度神经⽹络模型的⼩技巧应⽤到Inception模型中,确实可以起到优化模型的作⽤。在这⾥⼤家可以试下动态池化⽅法替换最⼤池对Inception模型结构会不会有提升?
英语自我介绍演讲稿参考⽂献
1. Going Deeper with Convolutions
2. Rethinking the Inception Architecture for Computer Vision
3. Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning
4. Tm P , Pranathi A , Saiashritha K , et al. Tomato Leaf Dia Detection Using Convolutional Neural Networks[C]// 2018 Eleventh International Conference on Contemporary Computing (IC3). IEEE Computer Society, 2018

本文发布于:2023-06-23 22:17:26,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/1024240.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:模型   卷积   优化   图像   深度   初始   数量   神经
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图