深度学习基础——彻底掌握卷积层的计算

机器学习也是刚刚入门,虽然对卷积、池化等过程很熟悉,但是一直不太清楚具体的计算,幸好在博文上看到了讲解过程,看完以后受益匪浅,然后自己又重新写了一遍。有这个表格,再也不用烦恼卷积的计算了。

原文地址:https://blog.csdn.net/dcrmg/article/details/79652487


一、概念与计算

输入矩阵:四个维度:[16,480,640,3] [batch,Height,Width,InDepth],依次是:图片数、高度、宽度、图像通道数。(16张图像,每张图像是高480宽640分辨率,通道是RGB通道)

输出矩阵:和输入矩阵的维度顺序、含义相同,但是最后三个出现了数值的变化。(图片张数不变)

权重矩阵(卷积核):维度同样是四,分别为:核高度、核宽度、输入通道数、输出通道数(卷积核个数)。

 

相互关系

1、卷积核的输入通道数(InDepth),由输入矩阵的通道数决定。(第一层卷积核的InDepth其实就是3)

2、输出矩阵的通道数(PutDepth),由卷积核的通道数决定。(人为定义的卷积核厚度)

3、输出矩阵的高度和宽度,由输入矩阵、卷积核、扫描方式共同决定(注:最后都要加一个floor[ ]函数。例如最后右侧算出来是512.5,要向下取整,输出高度为512)

 


二、标准卷积计算

以AlenNet模型的第一个卷积层为例:(已知stride=4,padding=0)

输入矩阵:[256,227,227,3] 一个Batch共有256张图片,每张图片的高和宽分别是277*277,每张图片的通道是3。

卷积核:[11,11,3,96] 每个卷积核的高和宽分别是11*11,通道数与输入矩阵是一样的为3,规定的卷积核数是96个。(卷积的时候有点像拿着两米长的管子去窥豹,每次窥一个斑点)

输出矩阵:[256,55,55,96] Batch是多少张,现在还是多少张。卷积核将通道3转换成为了卷积核的数量96。宽度和高度分别用公式来算:

(277-11+2*0)/4+1=55

 

最后列一个表,展示一下卷积的过程:


三、变种卷积

1、1*1卷积计算

一个像素大小的卷积核可以作为降低参数复杂度的手段,其作用就是将输入矩阵的通道数量进行调节,并保持它在宽度和高度上的尺寸。主要用于调节通道数,对不同的通道上的像素点进行线性组合,然后进行非线性化操作可以完成升维和降维的功能,如下图所示,选择2个1x1大小的卷积核,那么特征图的深度将会从3变成2,如果使用4个1x1的卷积核,特征图的深度将会由3变成4。

2、全连接层

全连接层也可以被视为是一种极端情况的卷积层,其卷积核尺寸就是输入矩阵尺寸,因此输出矩阵的高度和宽度尺寸都是1。


、池化计算

池化计算的方法与之前有所不同,在Tensorflow中,池化有两种选择:

valid_pad = tf.nn.max_pool(x, [1, 2, 2, 1], [1, 2, 2, 1], padding='VALID')
same_pad = tf.nn.max_pool(x, [1, 2, 2, 1], [1, 2, 2, 1], padding='SAME')

在池化操作中,当池化核一步一步移动到最右侧时,会出现列数不足的问题,此时有两种处理途径:

SAME(妥协派):在右侧添加0,完成最后的池化

VALID(强硬派):不管最后一次的池化
例如,当对一个2*3的矩阵进行池化时,kernel_size=2*2,stride=2。当池化到最右侧时,出现了列数不足的问题。此时VALID强硬派会直接把第三列舍去(左图),而SAME会对第三列进行0填充进而完成池化(右图)。

故池化计算公式为:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值