torch中的卷积层
1. torch.nn模块中的卷积层简介
t o r c h . n n torch.nn torch.nn模块包含着t o r c h orch orch已经准备好的卷积层,方便使用者调用构建网络。卷积可以看作是输入和卷积核之间的内积运算,是两个实值函数之间的一种数学运算。在卷积运算中,通常使用卷积核将输入数据进行卷积运算得到输出作为特征映射,每个卷积核可获得一个特征映射。
例如,二维图像卷积运算过程示意图如下图1所示。卷积核大小为2×2,步长为1。
2. 卷积运算特点
使用卷积运算在图像识别、图像分割、图像重建等应用中有三个好处:
- 稀疏连接: 在卷积神经网络中,通过输入卷积核来进行卷积操作,使输入单元(图像或特征映射)和输出单元(特征映射)之间的连接是稀疏的,这样能够减少需要训练参数的数量,从而加快网络的计算速度。
- 参数共享: 模型中同一组参数可以被多个函数或操作共同使用。
- 等变表示: 由于卷积核尺寸可以远远小于输入尺寸,即减少需要学习的参数的数量,并且针对每个卷积层可以使用多个卷积核获取输入的特征映射,对数据具有很强的特征提取和表示能力,并且在卷积运算之后,使得卷积神经网络结构对输入的图像具有平移不变的性质。
3. 卷积的调用方式
在PyTorch中针对卷积操作的对象和使用场景的不同,有一维卷积、二维卷积、三维卷积与转置卷积(卷积的逆操作),它们的使用方法比较相似,都从torch.nn模块中调用,常用的卷积操作对应的类有torch.nn.Conv1d()
、torch.nn.Conv2d()
、torch.nn.Conv3d()
、torch.nn.ConvTranspose1d()
、torch.nn.ConvTranspose2d()
、torch.nn.ConvTranspose3d()
。
以torch.nn.Conv2d()
为例,其调用方式为:
torch.nn.Conv2d(in_channels,
out_channels,
kernel_size,
stride=0,
padding=1,
dilation=1,
groups=1,
bias=True)
卷积参数 | 说明 |
---|---|
in_channels | 输入图像的通道数(整数) |
out_channels | 经过卷积运算后,输出特征映射的数量(整数) |
kernel_size | 卷积核的大小(整数或者数组) |
stride | 卷积的步长(整数或者数组,正数),默认为1 |
padding | 在输入两边进行0填充的数量(整数或者数组,正数),默认为0 |
dilation | 卷积核元素之间的步幅(整数或者数组,正数),可调整空洞卷积的空洞大小,默认为1 |
groups | 从输入通道到输出通道的阻塞连接数(整数,正数) |
bias | 是否添加偏置(布尔值)默认为True |
torch.nn.Conv2d()
输入的张量为 ( N , C i n , H i n , W i n ) (N,C_{in},H_{in},W_{in}) (N,Cin,Hin,Win),输出张量为 ( N , C o u t , H o u t , W o u t ) (N,C_{out},H_{out},W_{out}) (N,C