import torch
from torch import nn
# conv2d:卷积模型
# X:待卷积的图像(行数,列数)
# 定义一个进行卷积操作的函数,返回卷积操作后的图像(不包含批量大小和通道数)
def comp_conv2d(conv2d, X):
# 把X维度扩充为(批量大小,通道数,行数,列数)
X = X.reshape((1, 1) + X.shape)
Y = conv2d(X)
# 返回卷积操作后的图像(不包含批量大小和通道数)
return Y.reshape(Y.shape[2:])
# 定义一个卷积层,1个输入通道,1个输出通道,卷积核大小为3×3,在四周各填充一层0
conv2d = nn.Conv2d(1, 1, kernel_size=3, padding=1)
X = torch.rand(size=(8, 8))
Y= comp_conv2d(conv2d, X)
print(Y.shape)
# 输出:
# torch.Size([8, 8])
# 定义一个卷积层,1个输入通道,1个输出通道,卷积核大小为5×3,上下各填充两行0,左右各填充1列0
conv2d = nn.Conv2d(1, 1, kernel_size=(5, 3), padding=(2, 1))
Y = comp_conv2d(conv2d, X)
print(Y.shape)
# 输出:
# torch.Size([8, 8])
# 定义一个卷积层,1个输入通道,1个输出通道,卷积核大小为3×3,在四周各填充一层0,步幅为2
conv2d = nn.Conv2d(1, 1, kernel_size=3, padding=1, stride=2)
Y = comp_conv2d(conv2d, X)
print(Y.shape)
# 输出:
# torch.Size([8, 8])
# 定义一个卷积层,1个输入通道,1个输出通道,卷积核大小为3×5,上下不填充,左右各填充1列,向下步幅为3,向右步幅为4
conv2d = nn.Conv2d(1, 1, kernel_size=(3, 5), padding=(0, 1), stride=(3, 4))
Y = comp_conv2d(conv2d, X)
print(Y.shape)
# 输出:
# torch.Size([8, 8])