[Pytorch]卷积运算conv2d

这篇具有很好参考价值的文章主要介绍了[Pytorch]卷积运算conv2d。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

[Pytorch]卷积运算conv2d

一.F.Conv2d

torch.nn.functional.Conv2d()的详细参数:

conv2d(input: Tensor, weight: Tensor, bias: Optional[Tensor]=None, stride: Union[_int, _size]=1, padding: str="valid", dilation: Union[_int, _size]=1, groups: _int=1)

即F.Conv2d的主要参数如下:

  • input:输入特征图
  • weight:卷积核
  • bias:偏置参数
  • stride:卷积步长
  • padding:填充
  • dilation:膨胀系数
  • groups:分组卷积

利用F.Conv2d对图像中的暗线进行识别demo:

x = torch.tensor([
    [
        [1.0, 4, 1, 4, 5],
        [0, 5, 3, 2, 1],
        [21,25, 25, 23, 26],
        [5, 2, 5, 2, 5],
        [4, 9, 3, 0, 7]
    ],
    [
        [2, 2, 2, 7, 2],
        [0, 0, 6, 3, 0],
        [24, 25, 25, 23, 27],
        [0, 1, 1, 1, 5],
        [0, 2, 0, 2, 2]
    ],
    [
        [2, 2, 2, 1, 0],
        [7, 2, 4, 3, 1],
        [24, 23, 28, 23, 24],
        [0, 0, 2, 2, 5],
        [5, 2, 4, 5, 2]
    ]
])

weight = torch.tensor([
    [
        [0.0, 0, 0],
        [1, 1, 1],
        [0, 0, 0],
    ],
    [
        [0, 0, 0],
        [1, 1, 1],
        [0, 0, 0],
    ],
    [
        [0, 0, 0],
        [1, 1, 1],
        [0, 0, 0],
    ]
])
out = F.conv2d(x, weight=weight.unsqueeze(0), bias=None, stride=1, padding=0)


toPIL = transforms.ToPILImage()  # 这个函数可以将张量转为PIL图片,由小数转为0-255之间的像素值
img_PIL = toPIL(x)  # 张量tensor转换为图片
img_PIL.save('./original.png')  # 保存图片;img_PIL.show()可以直接显示图片
torchvision.transforms.ToPILImage()
img_PIL = toPIL(out)
img_PIL.save('./convoluted.png')
print(out)

[Pytorch]卷积运算conv2d,pytorch,深度学习,人工智能
[Pytorch]卷积运算conv2d,pytorch,深度学习,人工智能

二.nn.Conv2d

pytorch中的卷积运算接口可使用torch.nn中的Conv2d():

torch.nn.Conv2d( in_channels, out_channels, kernel_size, stride,  padding)

pytorch官方的参数解释说明:

 Args:
        in_channels (int): Number of channels in the input image
        out_channels (int): Number of channels produced by the convolution
        kernel_size (int or tuple): Size of the convolving kernel
        stride (int or tuple, optional): Stride of the convolution. Default: 1
        padding (int, tuple or str, optional): Padding added to all four sides of
            the input. Default: 0
        padding_mode (str, optional): ``'zeros'``, ``'reflect'``,
            ``'replicate'`` or ``'circular'``. Default: ``'zeros'``
        dilation (int or tuple, optional): Spacing between kernel elements. Default: 1
        groups (int, optional): Number of blocked connections from input
            channels to output channels. Default: 1
        bias (bool, optional): If ``True``, adds a learnable bias to the
            output. Default: ``True``

其中:padding_mode, dilation, groups, bias为可选参数,不是必须给定。

import torch
import torchvision.transforms
from torch import nn
from torchvision import transforms
from torch.nn import functional as F

convolutional_layer = nn.Conv2d(3, 3, kernel_size=3, stride=1, padding=0)
x = torch.tensor([
    [
        [231.0, 120, 111, 34, 45],
        [100, 85, 23, 200, 111],
        [31, 45, 100, 103, 220],
        [5, 5, 5, 5, 5],
        [54, 89, 103, 150, 67]
    ],
    [
        [12, 58, 52, 87, 100],
        [200, 140, 86, 23, 10],
        [60, 75, 45, 30, 7],
        [155, 155, 155, 155, 155],
        [0, 122, 0, 0, 12]
    ],
    [
        [12, 12, 12, 11, 10],
        [67, 12, 45, 23, 1],
        [56, 12, 5, 10, 8],
        [0, 0, 0, 0, 0],
        [5, 12, 34, 56, 12]
    ]
])
out = convolutional_layer(x)
print(out)
print(convolutional_layer.weight.shape)
print(convolutional_layer.bias)

[Pytorch]卷积运算conv2d,pytorch,深度学习,人工智能

通过将tensor转为图片模拟以下卷积运算的效果:

toPIL = transforms.ToPILImage()  # 这个函数可以将张量转为PIL图片,由小数转为0-255之间的像素值
img_PIL = toPIL(x)  # 张量tensor转换为图片
img_PIL.save('./original.png')  # 保存图片;img_PIL.show()可以直接显示图
img_PIL = toPIL(out)
img_PIL.save('./convoluted.png')

原特征图:
[Pytorch]卷积运算conv2d,pytorch,深度学习,人工智能
卷积运算后的输出特征图:
[Pytorch]卷积运算conv2d,pytorch,深度学习,人工智能

三.nn.Conv2d的运算过程

假如nn.Conv2d的定义如下:

convolutional_layer = torch.nn.Conv2d(2, 3, 3, 1, bias=None)

我们研究该函数是如何通过卷积运算将输入通道数2变成输入通道数3的:
原特征图的输入通道数为2,图示橙色和蓝色两个通道:
nn.Conv2d随机初始化3组卷积核,3为输出通道数,其中每组卷积核中卷积核的数量为2(输入通道数),分为橙色的卷积核与蓝色的卷积核,与对应的特征图做卷积运算,每组分别得到两个卷积运算后的特征图,将每组得到的特征图进行对应位置数值的相加操作即可得到最后的nn.Conv2d运算结果。该卷积层的卷积核个数总共为3x2个即输出通道数x输入通道数个。
[Pytorch]卷积运算conv2d,pytorch,深度学习,人工智能
下面为了验证上述过程正确,我们使用两个F.conv2d来分别模拟蓝色卷积核和橙色卷积核与对应特征图卷积运算的过程。并将最终的结果相加和直接采用nn.conv2d的结果比较:

convolutional_layer = torch.nn.Conv2d(2, 3, 3, 1, bias=None)
input = torch.randn(1, 2, 4, 4)
output = convolutional_layer(input)
weight = convolutional_layer.weight
out_1 = F.conv2d(input[:, 0, :, :].unsqueeze(1), weight[:, 0, :, :].unsqueeze(1), bias=None, stride=1, padding=0)
out_2 = F.conv2d(input[:, 1, :, :].unsqueeze(1), weight[:, 1, :, :].unsqueeze(1), bias=None, stride=1, padding=0)
print(f'output:\n{output}')
print('-----------------------------------------------------------------')
print(f'out_1 + out_2:\n{out_1 + out_2}')

[Pytorch]卷积运算conv2d,pytorch,深度学习,人工智能
最终通过比较发现,卷积运算的结果一致,说明上述nn.conv2d的具体运算过程正确文章来源地址https://www.toymoban.com/news/detail-627416.html

到了这里,关于[Pytorch]卷积运算conv2d的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在树莓派上实现numpy的conv2d卷积神经网络做图像分类,加载pytorch的模型参数,推理mnist手写数字识别,并使用多进程加速

    这几天又在玩树莓派,先是搞了个物联网,又在尝试在树莓派上搞一些简单的神经网络,这次搞得是卷积识别mnist手写数字识别 训练代码在电脑上,cpu就能训练,很快的: 然后需要自己在dataset里导出一些图片:我保存在了mnist_pi文件夹下,“_”后面的是标签,主要是在pc端导

    2024年02月07日
    浏览(24)
  • pytorch框架:conv1d、conv2d的输入数据维度是什么样的

    Conv1d 的输入数据维度通常是一个三维张量,形状为 (batch_size, in_channels, sequence_length),其中: batch_size 表示当前输入数据的批次大小; in_channels 表示当前输入数据的通道数,对于文本分类任务通常为 1,对于图像分类任务通常为 3(RGB)、1(灰度)等; sequence_length 表示当前输

    2024年01月16日
    浏览(37)
  • nn.Conv2d详解

    nn.Conv2d  是 PyTorch 中的一个卷积层,用于实现二维卷积操作。其主要参数有: in_channels :表示输入图像的通道数,也就是输入特征图的深度。 out_channels :表示输出特征图的通道数,也就是卷积核的个数。 kernel_size :表示卷积核的大小;可以是一个整数,表示正方形卷积核的

    2024年02月05日
    浏览(31)
  • 【知识点】nn.Conv2d参数设置

    reference   in_channels   这个很好理解,就是输入的四维张量[N, C, H, W]中的C了,即输入张量的channels数。这个形参是确定权重等可学习参数的shape所必需的。 out_channels   也很好理解,即期望的四维输出张量的channels数。 kernel_size   卷积核的大小,一般我们会使用5x5、3x3这

    2024年02月12日
    浏览(25)
  • 【深度学习】特征图的上采样(nn.Upsample)和转置卷积(nn.ConvTranspose2d) | pytorch

    这次就不废话了,我想赶在10点前回去洗头(现在9.17,还差一篇文章) 该函数有四个参数: 参数的介绍如下: 稍微翻译一下: 参数: 1)size(int或Tuple[int]或Tuple[int,int]或Tupple[int,int,int],可选):输出空间大小 2)scale_factor(float或Tuple[floot]或Tuple[floot,float]或Tuple[floo

    2023年04月08日
    浏览(33)
  • 【Pytorch】三维卷积 nn.Conv3d 用法

    nn.Conv3d 是 PyTorch 中实现三维卷积操作的类。 其输入和输出的维度如下: 输入维度: 输入张量的维度应为 (N, C_in, D, H, W) ,其中: N : 批量大小 (batch size),即一批输入数据中包含的样本数量。 C_in : 输入通道数 (number of input channels),即输入数据的通道数量,例如彩色图像通常

    2024年02月05日
    浏览(34)
  • CNN(一维卷积Conv1D)实现时间序列预测(PyTorch版)

    💥项目专栏:【深度学习时间序列预测案例】零基础入门经典深度学习时间序列预测项目实战(附代码+数据集+原理介绍)

    2024年02月01日
    浏览(29)
  • PyTorch 中的转置卷积 ConvTranspose2d

    现有的关于转置卷积的介绍大多流于表面,并未详细的说明这一操作内部具体的操作流程。由于转置卷积的设计主要是为了对标标准卷积,所以其实现流程与标准卷积基本相反,所以内部的操作逻辑并不直观。其按照卷积的相反逻辑的参数设置方式,这种反逻辑的形式使得我

    2024年02月17日
    浏览(29)
  • 卷积神经网络——上篇【深度学习】【PyTorch】

    5.1.1、理论部分 全连接层后,卷积层出现的意义? 一个足够充分的照片数据集,输入,全连接层参数,GPU成本,训练时间是巨大的。 (convolutional neural networks,CNN)是机器学习利用自然图像中一些已知结构的创造性方法,需要更少的参数,在处理图像和其他类型的结构化数据

    2024年02月12日
    浏览(29)
  • 【PyTorch与深度学习】2、PyTorch张量的运算API(上)

    课程地址 最近做实验发现自己还是基础框架上掌握得不好,于是开始重学一遍PyTorch框架,这个是课程笔记,这个课还是讲的简略,我半小时的课听了一个半小时。 (1) chunk :将一个张量分割为特定数目的张量,每个块都是输入张量的视图。 按维度0分割: 运行结果: b=

    2024年04月29日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包