【Pytorch】torch.nn.ConvTranspose2d

class torch.nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride=1, padding=0, output_padding=0, groups=1, bias=True)

2维的转置卷积操作。

说明

stride: 控制相关系数的计算步长 
dilation: 用于控制内核点之间的距离,详细描述在这里 
groups: 控制输入和输出之间的连接: group=1,输出是所有的输入的卷积;group=2,此时相当于有并排的两个卷积层,每个卷积层计算输入通道的一半,并且产生的输出是输出通道的一半,随后将这两个输出连接起来。

参数kernel_sizestridepaddingdilation数据类型: 可以是一个int类型的数据,此时卷积height和width值相同; 也可以是一个tuple数组(包含来两个int类型的数据),第一个int数据表示height的数值,第二个int类型的数据表示width的数值。

注意

由于内核的大小,输入的最后的一些列的数据可能会丢失。因为输入和输出是不是完全的互相关。因此,用户可以进行适当的填充(padding操作)。

参数:

  • in_channels(int) – 输入信号的通道数
  • out_channels(int) – 卷积产生的通道数
  • kerner_size(int or tuple) - 卷积核的大小
  • stride(int or tuple,optional) - 卷积步长
  • padding(int or tupleoptional) - 输入的每一条边补充0的层数
  • output_padding(int or tupleoptional) - 输出的每一条边补充0的层数
  • dilation(int or tupleoptional) – 卷积核元素之间的间距
  • groups(intoptional) – 从输入通道到输出通道的阻塞连接数
  • bias(booloptional) - 如果bias=True,添加偏置

shape: 
输入: (N,C_in,H_in,W_in) 
输出: (N,C_out,H_out,W_out) 

H_{out}=(H_{in}-1)*stride[0]-2*padding[0]+kernel_size[0]+output_padding[0]

W_{out}=(W_{in}-1)*stride[1]-2*padding[1]+kernel_size[1]+output_padding[1]

这个计算公式该怎么理解呢?

期望的形状你自己心里得清楚,比如输入H_{out}=256,H_{in}=128,那么首先是正向卷积计算,即256如何变到128:H_{in}=(H_{out} - kernel_size[0] + 2*padding[0])/2+1,这里卷积除不尽是向下取整,那么可以设定kernel_size[0]=3,padding[0]=1。设定完正向卷积的参数后,再反向计算也就是反卷积的尺寸,H_{out}=(H_{in}-1)*stride[0]-2*padding[0]+kernel_size[0],但算出的结果为255,那么就在结果的最下边补上一行,使其结果为256,符合我们的预期,所以可以看出最终的公式为:H_{out}=(H_{in}-1)*stride[0]-2*padding[0]+kernel_size[0]+output_padding[0]。

变量: 

- weight(tensor) - 卷积的权重,大小是(in_channelsin_channels,kernel_size
- bias(tensor) - 卷积的偏置系数,大小是(out_channel

你可能感兴趣的:(Pytorch)