写点什么

PyTorch 中 nn.Conv2d 与 nn.ConvTranspose2d 函数的用法

作者:代码的路
  • 2023-01-11
    江苏
  • 本文字数:1291 字

    阅读完需:约 4 分钟

原文链接

1. 通道数问题

  • 描述一个像素点,如果是灰度,那么只需要一个数值来描述它,就是单通道。如果有 RGB 三种颜色来描述它,就是三通道。最初输入的图片样本的 channels ,取决于图片类型;

  • 卷积操作完成后输出的 out_channels ,取决于卷积核的数量。此时的 out_channels 也会作为下一次卷积时的卷积核的 in_channels

  • 卷积核中的 in_channels ,上面已经说了,就是上一次卷积的 out_channels ,如果是第一次做卷积,就是样本图片的 channels


举个例子,假设现有一个为 6×6×3 的图片样本,使用 3×3×3 的卷积核(filter)进行卷积操作。此时输入图片的 channels 为 3,而卷积核中的 in_channels 与需要进行卷积操作的数据的 channels 一致(就是图片样本,为 3)。接下来进行卷积操作,卷积核中的 27 个数字与分别与样本对应相乘后,再进行求和,得到第一个结果。依次进行,最终得到 4×4 的结果。由于只有一个卷积核,所以最终得到的结果为 4×4×1,out_channels 为 1。如下图所示:



在实际应用中,都会使用多个卷积核。这里如果再加一个卷积核,就会得到 4×4×2 的结果。如下图所示:


2. nn.Conv2d

class torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, output_padding=0, groups=1, bias=True)
复制代码


nn.Conv2d


的功能是:对由多个输入平面组成的输入信号进行二维卷积。输入信号的形式为:


(1)参数说明

**N:**表示 batch size(批处理参数)


C_{in}:表示 channel 个数


**H,W:**分别表示特征图的高和宽。


**stride(步长):**步长,默认为 1,可以设为 1 个 int 型数或者一个(int, int)型的 tuple。


**kernel_size:**卷积核的宽度和长度,单个整数或由两个整数构成的 list/tuple。如为单个整数,则表示在各个空间维度的相同长度。


**padding(补 0):**控制 zero-padding 的数目,padding 是在卷积之前补 0。


**dilation(扩张):**控制 kernel 点(卷积核点)的间距; 可以在此 github 地址查看:Dilated convolution animations


**groups(卷积核个数):**通常来说,卷积个数唯一,但是对某些情况,可以设置范围在 1 —— in_channels 中数目的卷积核:

(2)图像尺寸

经过一次卷积之后,生成的图的大小:


(original_size - (kernal_size - 1)) / stride

3. nn.ConvTranspose2d

nn.ConvTranspose2d 的功能是进行反卷积操作

(1)输入格式

nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride=1, padding=0, output_padding=0, groups=1, bias=True, dilation=1)
复制代码

(2)参数的含义

  • in_channels(int) – 输入信号的通道数

  • out_channels(int) – 卷积产生的通道数

  • kerner_size(int or tuple) - 卷积核的大小

  • stride(int or tuple,optional) - 卷积步长,即要将输入扩大的倍数。

  • padding(int or tuple, optional) - 输入的每一条边补充 0 的层数,高宽都增加 2*padding

  • output_padding(int or tuple, optional) - 输出边补充 0 的层数,高宽都增加 padding

  • groups(int, optional) – 从输入通道到输出通道的阻塞连接数

  • bias(bool, optional) - 如果 bias=True,添加偏置

  • dilation(int or tuple, optional) – 卷积核元素之间的间距


学习更多编程知识,请关注我的公众号:


代码的路



发布于: 刚刚阅读数: 4
用户头像

代码的路

关注

公众号:代码的路 2023-01-10 加入

Java、Python、C++、图像处理、深度学习相关知识分享

评论

发布
暂无评论
PyTorch中 nn.Conv2d与nn.ConvTranspose2d函数的用法_Python_代码的路_InfoQ写作社区