欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > torch.nn系列函数学习 --- Conv2d函数

torch.nn系列函数学习 --- Conv2d函数

2024/10/25 19:34:19 来源:https://blog.csdn.net/m0_48241022/article/details/142464867  浏览:    关键词:torch.nn系列函数学习 --- Conv2d函数

该函数的官方文档:

https://pytorch.org/docs/stable/generated/torch.nn.Conv2d.html#torch.nn.Conv2d

torch.nn.Conv2d(in_channelsout_channelskernel_sizestride=1padding=0dilation=1groups=1bias=Truepadding_mode='zeros'device=Nonedtype=None)

参数

以下是参数释义:

  • in_channels (int) – 输入图像的通道数
  • out_channels (int) – 卷积生成的输出通道数
  • kernel_size (int 或 tuple) – 卷积核的大小
  • stride (int 或 tuple, 可选) – 卷积的步幅。默认值:1
  • padding (int, tuple 或 str, 可选) – 在输入的四周添加的填充。默认值:0。padding=0表示在输入的周围不添加填充;padding=1表示在输入的四周添加0填充。
  • padding_mode (str, 可选) – 填充模式,可以为 'zeros'(零填充)、'reflect'(用输入的反射值填充)、'replicate'(复制输入边缘的值填充)或 'circular'(循环填充)。默认值:'zeros'
  • dilation (int 或 tuple, 可选) – 卷积核元素之间的间隔。默认值:1
  • groups (int, 可选) – 从输入通道到输出通道的分组连接数。默认值:1
  • bias (bool, 可选) – 如果为 True,则为输出添加可学习的偏差项。默认值:True

注意:

  • stride 控制卷积操作的步幅,可以是一个单一的数字或一个元组。

  • padding 控制输入的填充量。可以是字符串 {‘valid’, ‘same’},或者是一个整数 / 整数组成的元组,表示在两侧应用的隐式填充量。

  • dilation 控制卷积核点之间的间距,也称为 à trous 算法。这个概念较难描述,不过此https://github.com/vdumoulin/conv_arithmetic/blob/master/gif/dilation.gif中有一个关于 dilation 的可视化展示。

  • groups 控制输入与输出之间的连接。in_channelsout_channels 都必须能被 groups 整除。例如:

    • groups=1 时,所有的输入都会与所有输出进行卷积。
    • groups=2 时,操作等价于有两个并行的卷积层,每个卷积层分别处理一半的输入通道,生成一半的输出通道,然后将结果拼接起来。
    • groups=in_channels 时,每个输入通道都有自己的一组卷积核(大小为 out_channels / in_channels)。
    • groups == in_channelsout_channels == K * in_channels,其中 K 是一个正整数时,这种操作也被称为“深度卷积(depthwise convolution)”。

参数 kernel_size, stride, padding, dilation 可以是:

  • 单个整数 —— 在这种情况下,高度和宽度维度使用相同的值。
  • 两个整数组成的元组 —— 在这种情况下,第一个整数用于高度维度,第二个整数用于宽度维度。

Conv2d 输入输出关系/输出尺寸计算公式:

应用举例 

上述示例代码如下: 

import torch.nn as nn
import torch
# 创建一个3通道5×5的输入图片tensor
input_image = torch.randn(1, 3, 5, 5) # 输入格式:(batch_size,C,H,W)
print(input_image)
conv = nn.Conv2d(in_channels=3, out_channels=4, kernel_size=3)
output = conv(input_image)
print(output)

 结果:

tensor([[[[ 0.0268, -0.5214, -1.0576, -1.8153,  0.4316],[-0.5418, -0.6783,  0.4006, -0.0805, -1.2690],[-0.6283, -2.1069, -0.2319, -0.1486, -0.0421],[ 0.6863, -0.6180, -1.1678,  0.1399,  1.8680],[ 0.2696, -0.4241,  1.2480, -1.1144, -2.1548]],[[-0.9676, -0.7849, -0.6417,  0.6378, -0.0830],[-0.4086,  0.3640,  1.7358,  0.0760, -1.0718],[-1.7090, -0.2209,  1.3072,  0.0145, -1.7926],[ 0.0429, -0.9867,  0.6733,  1.2083,  0.6626],[ 1.0097, -0.4465, -0.6531, -0.7984, -0.7761]],[[-1.0085,  1.6625,  1.2564,  1.5472,  0.8189],[-0.5107, -0.5895,  0.9165, -1.9156,  0.1210],[-1.6979, -0.8243, -0.1660, -0.0143,  0.1751],[ 0.5996,  0.4970,  0.6864,  0.4976,  1.3932],[-0.5763,  1.1135,  0.5067,  0.7716, -0.8962]]]])
tensor([[[[ 0.3662,  0.1012, -0.3846],[ 0.1358, -0.2235, -0.6957],[ 0.1401, -0.6588, -0.5720]],[[ 0.8294,  0.7968,  0.0436],[ 1.3758, -0.2057, -0.0881],[ 0.2979,  0.1449, -0.7776]],[[ 0.3114,  0.0881, -0.0831],[-0.2078,  0.0854,  0.1108],[ 0.5788,  0.0515,  0.0616]],[[ 0.8736, -0.3869, -0.6509],[ 0.4797,  0.0898, -0.1814],[ 0.2414, -0.1471,  0.2750]]]], grad_fn=<ThnnConv2DBackward>)Process finished with exit code 0

      我们看到输出的张量形状为1×4×3×3,1表示batch为1,4表示有四个feature_map,3×3表示feature_map的尺寸大小。

其余参数可自行推理!!! 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com