填充相同的高度和宽度,在所有侧边添加1个像素
import torch
from torch import nn
def comp_conv2d(conv2d,X):
# 所有侧边添加1个像素
X=X.reshape((1,1)+X.shape)
Y=conv2d(X)
# torch.Size([1, 1, 8, 8]) 1 通道数,1 batch_size
Y.shape
return Y.reshape(Y.shape[2:])
# 1输入通道数,1输出通道数,核大小3*3。padding是超参数,padding=1,上下左右都1像素
conv2d=nn.Conv2d(1,1,kernel_size=3,padding=1)
X=torch.rand(size=(8,8))
# 8+2-3+1=8,8+2-3+1=8
comp_conv2d(conv2d,X).shape
torch.Size([8, 8])
填充不同的高度和宽度
# padding 上下各2行 左右各1列
conv2d=nn.Conv2d(1,1,kernel_size=(5,3),padding=(2,1))
# 8+2+2-5+1=8,8+1+1-3+1=8
comp_conv2d(conv2d,X).shape
torch.Size([8, 8])
步幅的宽度和高度都是2
conv2d=nn.Conv2d(1,1,kernel_size=3,padding=1,stride=2)
# (8+1+1-3+2)/2=4,(8+1+1-3+2)/2=4
comp_conv2d(conv2d,X).shape
torch.Size([4, 4])
conv2d=nn.Conv2d(1,1,kernel_size=(3,5),padding=(0,1),stride=(3,4))
# (8+0+0-3+3)/3=2,(8+1+1-5+4)/4=2
comp_conv2d(conv2d,X).shape
torch.Size([2, 2])
总结
query
超参数,核大小 填充 步幅 影响力大小
构造深度为100层的神经网络
为什么卷积核的边长取奇数的多
核大小 填充 步幅超参数调节
使用经典的网络结构
使用小的卷积核,视野小
让超参数也一起参与学习
多层卷积后信息丢失
多层3x3卷积类似于少层5x5卷积
简单的神经网络