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

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

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。如下图所示:

pytorch8.png

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

pytorch9.png

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的功能是:对由多个输入平面组成的输入信号进行二维卷积。输入信号的形式为:

$$ (N,C_{in},H,W) $$

(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) – 卷积核元素之间的间距

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

代码的路

相关文章
|
机器学习/深度学习 PyTorch 算法框架/工具
深度学习Pytorch-Tensor函数
深度学习Pytorch-Tensor函数
73 0
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch基础之网络模块torch.nn中函数和模板类的使用详解(附源码)
PyTorch基础之网络模块torch.nn中函数和模板类的使用详解(附源码)
519 0
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch基础之激活函数模块中Sigmoid、Tanh、ReLU、LeakyReLU函数讲解(附源码)
PyTorch基础之激活函数模块中Sigmoid、Tanh、ReLU、LeakyReLU函数讲解(附源码)
269 0
|
6月前
|
数据采集 PyTorch 算法框架/工具
PyTorch基础之数据模块Dataset、DataLoader用法详解(附源码)
PyTorch基础之数据模块Dataset、DataLoader用法详解(附源码)
997 0
|
24天前
|
PyTorch 算法框架/工具
Pytorch学习笔记(五):nn.AdaptiveAvgPool2d()函数详解
PyTorch中的`nn.AdaptiveAvgPool2d()`函数用于实现自适应平均池化,能够将输入特征图调整到指定的输出尺寸,而不需要手动计算池化核大小和步长。
82 1
Pytorch学习笔记(五):nn.AdaptiveAvgPool2d()函数详解
|
24天前
|
PyTorch 算法框架/工具
Pytorch学习笔记(六):view()和nn.Linear()函数详解
这篇博客文章详细介绍了PyTorch中的`view()`和`nn.Linear()`函数,包括它们的语法格式、参数解释和具体代码示例。`view()`函数用于调整张量的形状,而`nn.Linear()`则作为全连接层,用于固定输出通道数。
65 0
Pytorch学习笔记(六):view()和nn.Linear()函数详解
|
24天前
|
PyTorch 算法框架/工具
Pytorch学习笔记(四):nn.MaxPool2d()函数详解
这篇博客文章详细介绍了PyTorch中的nn.MaxPool2d()函数,包括其语法格式、参数解释和具体代码示例,旨在指导读者理解和使用这个二维最大池化函数。
91 0
Pytorch学习笔记(四):nn.MaxPool2d()函数详解
|
24天前
|
PyTorch 算法框架/工具
Pytorch学习笔记(三):nn.BatchNorm2d()函数详解
本文介绍了PyTorch中的BatchNorm2d模块,它用于卷积层后的数据归一化处理,以稳定网络性能,并讨论了其参数如num_features、eps和momentum,以及affine参数对权重和偏置的影响。
98 0
Pytorch学习笔记(三):nn.BatchNorm2d()函数详解
|
25天前
|
机器学习/深度学习 PyTorch TensorFlow
Pytorch学习笔记(二):nn.Conv2d()函数详解
这篇文章是关于PyTorch中nn.Conv2d函数的详解,包括其函数语法、参数解释、具体代码示例以及与其他维度卷积函数的区别。
84 0
Pytorch学习笔记(二):nn.Conv2d()函数详解
|
24天前
|
PyTorch 算法框架/工具
Pytorch学习笔记(七):F.softmax()和F.log_softmax函数详解
本文介绍了PyTorch中的F.softmax()和F.log_softmax()函数的语法、参数和使用示例,解释了它们在进行归一化处理时的作用和区别。
244 1
Pytorch学习笔记(七):F.softmax()和F.log_softmax函数详解