PyTorch中卷积的简单操作
2022/1/26 6:06:56
本文主要是介绍PyTorch中卷积的简单操作,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
卷积
Conv1d
Conv1d
-
input
:形状的输入张量 -
weight
: 形状过滤器 -
bias
:形状的可选偏置张量( out_channels ). 默认:None
-
stride
:卷积核的步长。可以是单个数字或元组(sH, sW)。默认值:1 -
padding
:输入两侧的隐式填充。可以是字符串 {‘valid’, ‘same’}、单个数字或元组(padH, padW)。默认值:0padding='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
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()
运行结果:
这篇关于PyTorch中卷积的简单操作的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享