Pytorch(笔记2)--Conv2d卷积运算

当我们安装好pytorch的依赖环境以后,我们就可以学习pytorch了,我们首先引入依赖包如下:

import torch
import torchvision as tv
import torch.nn as nn

 接下来我们主要讲述nn.Conv2d 的卷积运算函数,nn.Conv2d的功能是:对由多个输入平面组成的输入信号进行二维卷积,以最简单的例子进行说明:

layer = nn.Conv2d(in_channels=1,out_channels=3,kernel_size=3,stride=1,padding=0)

参数理解:(画重点!)

in_channels:个人认为有两种理解

                     1)输入通道数,对于图片层一般为1(灰度)3(RGB)

                     2)定义一种输入规则,要求上一层的输出必须和这个输入一致,也可以理解为并发in_channels个channel在上一层                    .                    feature_map(特征映射)上进行卷积运算

out_channels:

                    1)直观理解是输出层通道数,

                    2)换一种理解是kernels(卷积核)个数,其中,每个卷积核会输出局部特征,比如下图中

                    面部中有头发feature,衣服颜色的feature都是由不同的kernel进行卷积运算得到的。

             看了上面的内容,你或许会有这个疑问如果in_channels也就是说输入的feature也要包含3个channel的tensor(ndarray)对的   或许你会问,那如果out_channels是2,那怎么从3-->变成2的?

     Pytorch(笔记2)--Conv2d卷积运算_第1张图片

下图是详细的原理图:

Pytorch(笔记2)--Conv2d卷积运算_第2张图片

(补充:上述说的是kernel1的运算,有多少个kernel就有多少个相同的运算,最终会输出[b,out_channels,w,h],其中w和h是输出的shape,下文有讲计算方法)

stride(步长):控制cross-correlation的步长,可以设为1个int型数或者一个(int, int)型的tuple。

padding(补0):控制zero-padding的数目。

dilation(扩张):控制kernel点(卷积核点)的间距; 也被称为 "à trous"算法. 可以在此github地址查看:Dilated convolution animations

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

output_size 运算

1)试想,在没有padding(边缘填充)的情况下,有卷积操作如下

layer = nn.Conv2d(in_channels=1,out_channels=3,kernel_size=3,stride=1,padding=0)

如果输入的图像是1张大小是28*28的灰度图像

x = torch.rand(1,1,28,28)

卷积核每次移动1(stride=1)最大可以移动26个值到达边缘,因此输出是1张3通道的26*26的图像1*3*26*26

2)如果每次移动2(stride= 2),是不是只要经过13次运算就到了边缘所以输出结果是 1*3*13*13

layer = nn.Conv2d(in_channels=1,out_channels=3,kernel_size=3,stride=2,padding=0)

3)如果增加了边缘补充(padding=1)

layer = nn.Conv2d(in_channels=1,out_channels=3,kernel_size=3,stride=1,padding=1)

原始图像可以理解为30*30的大小,图像需要移动30-(kernelsize-1)=28 步输出是1*3*28*28 相同大小的图像

如果每次移动两步(stride=2)

layer = nn.Conv2d(in_channels=1,out_channels=3,kernel_size=3,stride=2,padding=1)

需要移动((28+1*2)-(3-1))/2 =14 也就是输出大小是1*3*28*28 ,哈哈哈是不是发现了什么规律呢?

大家可以根据我运算的过程总结如下公式:

       Pytorch(笔记2)--Conv2d卷积运算_第3张图片

 接下来请推导下经典网络的卷积过程!

Pytorch(笔记2)--Conv2d卷积运算_第4张图片

   坚持一件事情或许很难,但坚持下来一定很酷!^_^

你可能感兴趣的:(Pytorch,Conv2d,卷积运算,Python,Pytorch)