6.3 填充和步幅

一.填充

1.作用:

为了防止丢失边缘像素。如240x240的像素图像,经过10层5x5卷积,根据输出形状计算公式 (w-k+1) x (h-k+1)计算出输出形状变成了200x200。

2.方法:

最常用的方法是填充0。如下:
6.3 填充和步幅_第1张图片

3.公式:计算填充原图像后的输出形状

假设填充p行(上面填充p/2行,下面填充p/2行),p列。输出大小为:

w = (原图片h行 + 填充p行 -k + 1)
h = (原图片w列 + 填充p列 -k + 1)

相当于输出的高度和宽度直接增加p行和p列

4.应用:使输入和输出具有相同的形状

设置

 p_w = k_w - 1
 p_h = k_h - 1

5.补充:为什么卷积核需要设置成奇数?

如果需要输入输出具有相同形状,那么一般设置卷积核奇数,这样填充的w和h将会是偶数,就可以让顶部和底部填充相同的行,左侧右侧填充相同的列

6.代码

import torch
from torch import nn

def comp_conv2d(conv2d,X):
    # 输入X的shape为(8,8),输出为(1,1,8,8),1,1表示批量大小和通道数
    X = X.reshape((1,1) + X.shape)
    Y = conv2d(X)
    return Y
    
#随机生成一个8*8的X
X = torch.rand(size=(8,8))
# 1,1表示通道数和维度
conv2d = nn.Conv2d(1,1,kernel_size=3,padding=1)
comp_conv2d(conv2d,X).shape

输出结果:torch.Size([1, 1, 8, 8])

二.步幅

1.是什么

卷积窗口每次滑动元素的数量,也叫步长

2.例子

垂直步幅为3,水平步幅为2的卷积运算:

6.3 填充和步幅_第2张图片

输出形状计算

w = (原图片行数 + 填充行数 - k + 1 + 水平步幅) / 水平步幅
h = (原图片列数 +填充列数 - k + 1 + 垂直步幅) / 垂直步幅

如上图: 
原图片行数和列数 = (3,3)
填充行数和列数 = (2,2)
k = (2,2)
水平步幅,垂直步幅 = (2,3)
3+2-2+1 +2 / 2 =  4 / 2 = 2
3+2-2+1 +3 / 3 = 7 / 3 = 2.3333取整

你可能感兴趣的:(动手学深度学习(计算机视觉篇),深度学习,人工智能)