深度学习与神经网络(七)——卷积神经网络之池化 & upsample与downsample & BatchNorm

池化层pooling与采样

upsample与downsample

upsample是上采样,类似图片的放大

downsample是下采样,类似图片的缩小

比如这种隔行采样就是下采样

深度学习与神经网络(七)——卷积神经网络之池化 & upsample与downsample & BatchNorm_第1张图片

 

在卷积神经网络中使用的采样方式就是pooling,有点类似下采样,但不太一样

pooling也是把feature map变小的操作

pooling有多种方式,如max pooling, avg pooling

 

Max pooling是取窗口中最大的值

深度学习与神经网络(七)——卷积神经网络之池化 & upsample与downsample & BatchNorm_第2张图片这里的stride是2,如果是1的话生成的矩阵应该是3*3的了

 

Avg pooling 就是取窗口中数字的平均值

深度学习与神经网络(七)——卷积神经网络之池化 & upsample与downsample & BatchNorm_第3张图片

 

 

在最原始的LeNet5用的还不是pooling,用的是subsampling,就是downsampling,就是隔行采样

深度学习与神经网络(七)——卷积神经网络之池化 & upsample与downsample & BatchNorm_第4张图片

从AlexNet开始引入了pooling操作

 

 

深度学习与神经网络(七)——卷积神经网络之池化 & upsample与downsample & BatchNorm_第5张图片

 

 

pytorch的pooling操作

深度学习与神经网络(七)——卷积神经网络之池化 & upsample与downsample & BatchNorm_第6张图片

因为处理的是二维的图片,所以是MaxPool2d()

MaxPool2d第一个参数是window的大小,第二个参数是stride移动步长

两个都是2注定结果的size是原图的减半

同样pool操作也有nn.和F. 两个版本

 

upsample操作

upsample是通过插值,即interpolate

深度学习与神经网络(七)——卷积神经网络之池化 & upsample与downsample & BatchNorm_第7张图片

scale_factor是放大几倍

mode有多种

 

BatchNorm

Batch Normalization不知用在CNN里面,RNN和网络都会用到

 

为什么要用到Batch Normalization

深度学习与神经网络(七)——卷积神经网络之池化 & upsample与downsample & BatchNorm_第8张图片

如图所示,如果w1和w2的数量级规模差距较大的话

w2的少量变化会引起loss的急剧变化,w1的变化引起的loss变化会少一点

深度学习与神经网络(七)——卷积神经网络之池化 & upsample与downsample & BatchNorm_第9张图片

竖直方向变动的话,等高线会急剧下降

水平方向变动的话,等高线的变化会少很多

这样的话,梯度下降的搜索过程是一个,如图,比较曲折的过程

 

而如果w1和w2的量级规模是一样的话,就会是这样

深度学习与神经网络(七)——卷积神经网络之池化 & upsample与downsample & BatchNorm_第10张图片

是一个圆的路径,这样不管搜索的时候是从哪个点出发,梯度的方向指向的就是全局最小解的方向(圆心的方向)

这样搜索过程就会比较快捷、方便、稳定

 

所以我们就需要这样一个权值缩放,把参数都整到同一个量级上

最好是弄到均值为0

 

 

这是对图片做Image Normalization的操作

三个分别是R、G、B通道

具体的做法就是(R-0.485)/0.229,(G-0.456)/0.224,(B-0.406)/0.225

(xr',xg',xb')~N(0,1)

 

Batch Norm

深度学习与神经网络(七)——卷积神经网络之池化 & upsample与downsample & BatchNorm_第11张图片

这4种思路类似,区别是在哪一个维度做normalize

我们的batch是[N,C,H,W],而H和W分别是图片的长和宽,我们把它们乘在一起,变成[N,C,H*W]

N是图片个数,C是channel数

假设为[6,3,784]

深度学习与神经网络(七)——卷积神经网络之池化 & upsample与downsample & BatchNorm_第12张图片

batchnorm是在[6,3,784]的 6和784 上,会生成一个[3]的

对于chnnel0,会生成一个channel0的均值和方差

对于chnnel1,会生成一个channel1的均值和方差

对于chnnel2,会生成一个channel2的均值和方差

 

pytorch的实现

一维

BatchNorm1d()

只需要给定一个参数,就是C,就是channel数量

深度学习与神经网络(七)——卷积神经网络之池化 & upsample与downsample & BatchNorm_第13张图片

μ是均值

σ^2是方差

 

二维

nn.BatchNorm2d

深度学习与神经网络(七)——卷积神经网络之池化 & upsample与downsample & BatchNorm_第14张图片

 

Batch Norm的效果可视化

深度学习与神经网络(七)——卷积神经网络之池化 & upsample与downsample & BatchNorm_第15张图片

虚线都是使用了Bacth Norm的

然后从可视化图上可以看出,加bacthnorm的偏差也小了一些

 

使用Batch Norm的好处

深度学习与神经网络(七)——卷积神经网络之池化 & upsample与downsample & BatchNorm_第16张图片

收敛速度更快

表现更好

更加健壮性

 

你可能感兴趣的:(深度学习与神经网络(七)——卷积神经网络之池化 & upsample与downsample & BatchNorm)