实验代码
import torch
import torch.nn as nn
import torch.nn.functional as F
#h/w = (h/w - kennel_size + 2padding) / stride + 1 卷积计算
x = torch.randn(2, 3, 7, 6) # batch, channel , height , width
m = nn.Conv2d(3, 1, (3, 2), (2,1)) # in_channel, out_channel ,kennel_size,stride
print(m)#Conv2d(4, 1, kernel_size=(3, 2), stride=(2, 1))
print(m.weight.shape)#torch.Size([1, 3, 3, 2]) batch, channel ,kennel_height,kennel_width 权重随机
y = m(x)
print(y.shape)#torch.Size([2, 1, 3, 5]) 计算公式h/w = (h/w - kennel_size + 2padding) / stride + 1
输出
H:\ProgramData\Anaconda3\python.exe D:/PycharmProjects/untitled3/test.py
Conv2d(3, 1, kernel_size=(3, 2), stride=(2, 1))
torch.Size([1, 3, 3, 2])
torch.Size([2, 1, 3, 5])
Process finished with exit code 0
几点说明:(1)卷积核的参数都是随机生成的,训练时会一起调整;
(2)卷积核的大小为batch x channel x kennel_height x kennel_width;
(3)通过卷积层后大小由上图公式给出,输入为四维,输出也为四维。