Pytorch中的卷积与反卷积(conv2d和convTranspose2d)

卷积

卷积是特征提取的常用操作,卷积可以改变图片的通道和大小,相比全连接操作,卷积可以减少计算量,并且充分融合图像的局部特征。

image

import torch
import torch.nn as nn

x = torch.randn(1,1,4,4)
model = nn.Conv2d(in_channels=1,out_channels=1,kernel_size=3,stride=1,padding=0)
output = model(x)
print('output shape',output.shape)

 

 

import torch
import torch.nn as nn

x = torch.randn(1,1,5,5)
model = nn.Conv2d(in_channels=1,out_channels=1,kernel_size=4,stride=1,padding=2)
output = model(x)
print('output shape',output.shape)

 

 反卷积(ConvTranspose2d)

反卷积是深度学习常见的上采样操作。另外上采样还有uppooling和双三次插值。

反卷积可以认为先对feature map进行插值/padding操作得到新的feature map然后进行常规的卷积运算

反卷积并不是卷积操作的逆过程。通过反卷积,只能恢复原矩阵的大小,但并不能完全恢复原矩阵的数值

反卷积的参数与卷积的参数含义发生的变化。pandding可以理解为卷积核向中心移动的步数。 同时stride也不再是kernel移动的步数,变为输入单元彼此散开的步数。

反卷积的padding参数

padding=0,kernel_size=3,stride=1

J66KbV.gif

 padding=2,kernel_size=3,stride=1

在这里插入图片描述

 可以看到当padding=2的时候这个kernel向中心平移了2个单位。

反卷积的stride参数

padding=0,kernel_size=3,stride=1

padding=0,kernel_size=3,stride=2 

在这里插入图片描述 

可以看到stride等于在原始图片中填充0,填充的格式为stride-1 

 反卷积中output_padding参数

当stride>1的时候,在特征图的下方和右方进行插值。

import torch
import torch.nn as nn

x = torch.randn(1,1,3,3)
#这里的padding 与卷积的padding相反,卷积中的padding是在周围填充0,而这里的padding是已经在周围插值的kernel_size个0,padding表示的向中心移动的距离
#output_padding,表示当stride大于1的时候,需要在特征图周围进行填充
model = nn.ConvTranspose2d(in_channels=1,out_channels=1,kernel_size=3,stride=2,padding=1,output_padding=1)
output = model(x)
print('output shape',output.shape)

猜你喜欢

转载自blog.csdn.net/qq_40107571/article/details/128362203
今日推荐