keras搬砖系列-inception module

本文是Keras搬砖系列的一部分,详细介绍了1*1卷积核在降低通道数和减少运算量上的作用,以及Inception模块的设计原理。Inception模块通过结合不同大小的卷积核和最大池化层,有效降低计算量并增强特征提取能力。文章还提及GoogleNet网络结构,它是由多个Inception模块构成,以实现高效深度学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

keras搬砖系列-inception module

一、1*1 卷积核作用:

1,可以降低通道数

2,减少运算量

如果对于一个28*28*192的初始图像采用的是,5*5*32的卷积核。

则计算量为5*5*192*28*28*32

若采用1*1*32的卷积核

则计算量为192*28*28*32

其次,对于池化来说只能减小宽和高,但是1*1卷积核可以有效的解决通道数目问题。

二、inception module


首先输入一个28*28*192的图片会经历三个一个是(1,1,96),(1,1,16)和一个最大池化层,其中池化层采用padding=same的模式,不会改变图片大小,后面,会经历(5,5,32),(3,3,128),(1,1,64),(1,1,32).具体连接如上。

最后将它们进行concatenate得到一个(28,28,256)。所以inception module整体上降低了计算量,其次也可以采用多个滤波器,用不同的视野对图片进行操作。

三、GoogleNet

对于GoogleNet而言,它主要就是由多个inception module组成的

三、重写GoogleNet
def Conv2d_BN(x,filter,kernel_size,padding='same',strides=(1,1),name=None):
	if name is not None:
		bn_name = name+'_bn'
		conv_name = name+'_conv'
	else:
		bn_name = None
		conv_name = None
	x = Conv2D(nb_filter,kernel_size,padding=padding,strides=strides,acitivation='relu',name = conv_name)(x)
	x = BatchNormalization(axis=3,name = bn_name)(x)
	return x

def inception(x,nb_filter):
	branch1x1 = Conv2d_BN(x,nb_filter,(1,1),padding='same',strides=(1,1),name=None)

	branch3x3 = Conv2d_BN(x,nb_filter,(1,1),padding='same',strides=(1,1),name=None)
	branch3x3 = Conv2d_BN(branch3x3,nb_filter,(3,3),padding='same',strides=(1,1),name=None)

	branch5x5 = Conv2d_BN(x,nb_filter,(1,1),padding='same',strides=(1,1),name=None)
	branch5x5 = Conv2d_BN(branch5x5,nb_filter,(5,5),padding='same',strides=(1,1),name=None)

	branchpool = MaxPooling2D(pool_size=(3,3),strides=(1,1),padding='same')(x)
	branchpool = Conv2d_BN(branchpool,nb_filter,(1,1),padding='same',strides=(1,1),name=None)

	x = concatenate([branch1x1,branch3x3,branch5x5,branchpool],axis=3)
	return x


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值