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

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

原文地址: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)

深度学习基础——彻底掌握卷积层的计算_第1张图片

 


二、标准卷积计算

以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

 

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

深度学习基础——彻底掌握卷积层的计算_第2张图片


三、变种卷积

1、1*1卷积计算

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

深度学习基础——彻底掌握卷积层的计算_第3张图片

深度学习基础——彻底掌握卷积层的计算_第4张图片

2、全连接层

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

深度学习基础——彻底掌握卷积层的计算_第5张图片


、池化计算

池化计算的方法与之前有所不同,在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填充进而完成池化(右图)。

深度学习基础——彻底掌握卷积层的计算_第6张图片深度学习基础——彻底掌握卷积层的计算_第7张图片

故池化计算公式为:

深度学习基础——彻底掌握卷积层的计算_第8张图片

 

你可能感兴趣的:(神经网络,深度学习,卷积层的计算,基础,Conv,Layer)