这个模块就是torch为我们设计好的一些层结果,比如我想给网络加一个卷积层,直接用这个模块里的函数就可以实现,而不像低级语言需要自己编写层间的矩阵乘法以及变量的储存等工作,极大提高了网络搭建的效率。
一行代码就可以给网络添加一个二维卷积层:
self.conv1 = nn.Conv2d(3, 6, 5)
Convolution layers模块包含的子模块
对一个信号进行一维卷积。一般我们处理图片时是二维卷积,这里处理一些声音信号等一维的信号时使用。
函数原型:
torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros')
输入尺寸(N,Cin,L):N为batchsize,就是数据个数;Cin是输入数据的通道数,可能是多个通道的,卷积核的通道数要和这个一致;L信号的长度,卷积核就是在这个长度上移动,进行卷积的。
输出尺寸(N,Cout,Lout):N为batchsize,数据个数不会改变;Cout是输出通道数,等于卷积核的个数,一般在网络中因为使用了很多卷积核,这个数字会随着网络变深而增加;Lout输出长度,根据输入长度、卷积核大小、是否补零、步长等决定。
我们主要研究图像,所以这部分介绍到此为止
torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros')
最简单的情况:
输入(N,Cin,H,W):N为batchsize,就是一组图片的个数;Cin是输入数据的通道数,例如RGB三个通道;H、W是图片的尺寸。
输出(N,Cout,Hout,Wout):N为batchsize,和输入相同;Cout是输出通道数,等于卷积核的个数,一般在网络中因为使用了很多卷积核,这个数字会随着网络变深而增加;Hout,Wout是输出feature图的尺寸,根据输入尺寸、卷积核大小、是否补零、步长等决定。
计算关系如下:
某些参数介绍:
dilation:进行膨胀卷积用的参数;
groups:可以给通道分组,进行不同的卷积,必须能够整除
in_channels
和out_channels,例如
groups=1,所有输入通道都用卷积核1进行卷积来算输出的一个通道
groups=2,一半的输入通道用卷积核1进行卷积来算输出的一个通道
这个可能是用于点云处理的,略
反卷积层,以2d为例,相当于decoder的操作,使feature图的尺寸变大
torch.nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride=1, padding=0, output_padding=0, groups=1, bias=True, dilation=1, padding_mode='zeros')
把卷积核扫到的部分展开成一维向量