经典CNN的实现 InceptionNet

本文介绍了InceptionNet的起源、结构特点和优势,它以CBA结构为基础,通过多尺寸卷积和全局平均池化降低参数量,避免了VGGNet的深度堆叠。InceptionBlock的四条运算路径在深度上堆叠,简化了网络设计,但随着深度增加训练难度增大,为ResNet解决此问题铺平了道路。
摘要由CSDN通过智能技术生成

经典CNN的实现 InceptionNet

InceptionNet

InceptionNet诞生于2014年,当年ImageNet竞赛冠军,Top5错误率为6.67%

论文出处:Szegedy C, Liu W, Jia Y, et al. Going Deeper with Convolutions. In CVPR, 2015.

InceptionNet旨在通过增加网络的宽度来提升网络的能力,与 VGGNet 通过卷积层堆叠的方式(纵向)相比,是一个不同的方向(横向)。要理解 InceptionNet 的结构,首先要理解它的基本单元:InceptionNet 结构块

image-20220309102627367

对于一Inception结构块,它的输入会经过四条路径的运算,然后将四天路径的运算在深度方向堆叠在一起,形成输出。

可以看到的是,InceptionNet 的基本单元中,卷积部分是比较统一的 CBA结构,即 卷积→BN→激活,且激活均采用 Relu 激活函数,同时包含最大池化操作。因此我们可以把CBA封装成一个新的类,ConvBNRelu类,以减少代码量,且易于阅读。

class ConvBNRelu(Model):
    # 参数 ch 代表特征图的通道数,也即卷积核个数;kernelsz 代表卷积核尺寸;strides 代表 卷积步长;padding 代表是否进行全零填充。
    def __init__(self,ch, kernelsz=3, strides=1, padding='same'):
        super(ConvBNRelu, self).__init__()
        self.model=tf.keras.Sequential([
            Conv2D(ch,kernelsz,strides=strides,padding=padding),
            BatchNormalization(),
            Activation('relu')
        ])


    def call(self, x):
        x = self
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值