Conv1d
input
:形状的输入张量
weight
: 形状过滤器
bias
:形状的可选偏置张量( out_channels ). 默认:None
stride
:卷积核的步长。可以是单个数字或元组(sH, sW)。默认值:1
padding
:输入两侧的隐式填充。可以是字符串 {‘valid’, ‘same’}、单个数字或元组(padH, padW)。默认值:0 padding='valid'
与无填充相同。padding='same'
填充输入,使输出具有作为输入的形状。但是,此模式不支持除 1 以外的任何步幅值。
对于
padding='same'
,如果weight
是偶数长度并且dilation
在任何维度上都是奇数,则pad()
内部可能需要完整操作。降低性能。
dilation
:内核元素之间的间距。可以是单个数字或元组(dH, dW)。默认值:1
groups
:将输入分成组,\text{in_channels}输入频道应该可以被组数整除。默认值:1
import torch import torch.nn.functional as F input = torch.tensor([[1, 2, 0, 3, 1], [0, 1, 2, 3, 1], [1, 2, 1, 0, 0], [5, 2, 3, 1, 1], [2, 1, 0, 1, 1]]) kernel = torch.tensor([[1, 2, 1], [0, 1, 0], [2, 1, 0]]) input = torch.reshape(input, (1, 1, 5, 5)) kernel = torch.reshape(kernel, (1, 1, 3, 3)) print(input.shape) print(kernel.shape) output = F.conv2d(input, kernel, stride=1) print(output)
输出结果:
output2 = F.conv2d(input, kernel, stride=2) print(output2) output3 = F.conv2d(input, kernel, stride=1, padding=1) print(output3)
输出结果:
Conv2d
in_channels
(int):输入图像中的通道数out_channels
(int):卷积产生的通道数kernel_size
(int or tuple):卷积核的大小stride
(int or tuple, optional):卷积的步幅。默认值:1padding
(int, tuple or str, optional):填充添加到输入的所有四个边。默认值:0padding_mode
(string, optional):‘zeros’,
‘reflect’,
‘replicate’或
‘circular’。默认:
‘zeros’dilation
(int or tuple,optional):内核元素之间的间距。默认值:1groups
(int, optional):从输入通道到输出通道的阻塞连接数。默认值:1bia
(*bool, optional):如果True
,则向输出添加可学习的偏差。默认:True
import torch import torchvision from torch import nn from torch.nn import Conv2d from torch.utils.data import DataLoader from torch.utils.tensorboard import SummaryWriter dataset = torchvision.datasets.CIFAR10(root = "./dataset", train = False, transform = torchvision.transforms.ToTensor(), download = True) dataloader = DataLoader(dataset, batch_size = 64) class Model(nn.Module): def __init__(self): super().__init__() self.conv1 = Conv2d(in_channels = 3, out_channels = 6, kernel_size = 3, stride = 1, padding = 0) def forward(self, x): x = self.conv1(x) return x model = Model() writer = SummaryWriter("logs") step = 0 for data in dataloader: imgs, targets = data output = model(imgs) print(imgs.shape) print(output.shape) # torch.Size([64, 3, 32, 32]) writer.add_images("input", imgs, step) # torch.Size([64, 6, 30, 30]) -> [xxx, 3, 30, 30] output = torch.reshape(output, (-1, 3, 30, 30)) writer.add_images("output", output, step) step = step + 1 writer.close()
运行结果: