torch.nn 之 Convolution Layers
torch.nn 是 torch 的神经网络计算部分,其中有许多基础的功能。本文主要记录一下 torch.nn 的 Convolution Layers 。
CONV2D 是 CNN 的核心计算单元,参考 torch.nn.Conv2d 的实现,我们算一下维度。
目标
对 input tensor 进行二维卷积,二维卷积时最常用的卷积操作。通过 kernel 将输入矩阵中的特定信息进行拟合抽取,从而得到原始矩阵的一些特别的结构。
输入参数
torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode=’zeros’)
- in_channels: 输入通道数
- out_channels 输出通道数
- kernel_size: 如果是 int 的话,卷积核为 [kernel_size,kernel_size], 如果是 list ,就直接是卷积核的维度。
- stride: 每次移动多少步,可以是二维的。
- padding: 周围一圈 padding 的个数,可以是 list 或者 int。
- dilation: 膨胀/空洞的个数,一般为0,不空洞。
input_size
为 , output_size
为 。
更多概念可以参考 之前的 tf CNN 文章 。
运算过程
1、默认情况下是不 padding 的。
1 | m = nn.Conv2d(16, 1, (2,2)) |
2、in_channels
也就是 ,out_channels
也就是 。
3、stride 默认是 (1,1) 的,也就是横向竖向每次走一步。修改 stide 会明显改变 和
1 | m = nn.Conv2d(16, 1, 1, stride=(2, 1)) |
4、padding 相当于在周围增加了一圈数,一般是 0,比如
1 | input = torch.randn(20, 16, 50, 100) |
torch.nn 之 Convolution Layers