torch.nn 之 Convolution Layers

torch.nn 是 torch 的神经网络计算部分,其中有许多基础的功能。本文主要记录一下 torch.nnConvolution 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
2
3
4
5
6
m = nn.Conv2d(16, 1, (2,2))
input = torch.randn(20, 16, 50, 100)
output = m(input)
print("output.shape:",output.shape)

# output.shape: torch.Size([20, 1, 49, 99])

2、in_channels 也就是 out_channels 也就是

3、stride 默认是 (1,1) 的,也就是横向竖向每次走一步。修改 stide 会明显改变

1
2
3
4
5
6
m = nn.Conv2d(16, 1, 1, stride=(2, 1))
input = torch.randn(20, 16, 50, 100)
output = m(input)
print("output.shape:",output.shape)

# output.shape: torch.Size([20, 1, 25, 100])

4、padding 相当于在周围增加了一圈数,一般是 0,比如

1
2
3
4
5
6
7
8
input = torch.randn(20, 16, 50, 100)

m = nn.Conv2d(16, 1, 1, padding=(4, 2), bias=False)
output = m(input)
print("output.shape:",output.shape)

# output.shape: torch.Size([20, 1, 58, 104])

torch.nn 之 Convolution Layers

https://iii.run/archives/92bd07c3d251.html

作者

mmmwhy

发布于

2021-05-31

更新于

2022-10-08

许可协议

评论