乐趣区

关于pytorch:PyTorch中-nnConv2d与nnConvTranspose2d函数的用法

原文链接

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的性能是:对由多个输出立体组成的输出信号进行二维卷积。输出信号的模式为:

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

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

代码的路

退出移动版