nn.Upsample
CLASS torch.nn.Upsample(size=None, scale_factor=None, mode='nearest', align_corners=None)
参数:
-
size – 根据不同的输入类型制定的输出大小
-
scale_factor – 指定输出为输入的多少倍数。如果输入为tuple,其也要制定为tuple类型。注意:size跟scale_factor只能同时指定一个。
-
mode – 上采样算法,有’nearest’, ‘linear’, ‘bilinear’, ‘bicubic’ and ‘trilinear’. 默认使用’nearest’
-
align_corners – 如果为True,输入的角像素将与输出张量对齐,因此将保存下来这些像素的值。仅当使用的算法为’linear’, 'bilinear’or 'trilinear’时可以使用。默认设置为False。
举个例子:
定义一个tensor 名为 input:
tensor([[[[1., 2.],
[3., 4.]]]])
反池化:
UP = nn.Upsample(scale_factor=2, mode='nearest')
UP(input)
输出为:
tensor([[[[1., 1., 2., 2.],
[1., 1., 2., 2.],
[3., 3., 4., 4.],
[3., 3., 4., 4.]]]])
不同的mode参数对应不同的上采样算法,此处再举例mode='bilinear’的情况:
#mode = 'bilinear',align_corners = False
tensor([[[[1.0000, 1.2500, 1.7500, 2.0000],
[1.5000, 1.7500, 2.2500, 2.5000],
[2.5000, 2.7500, 3.2500, 3.5000],
[3.0000, 3.2500, 3.7500, 4.0000]]]])
#mode = 'bilinear',align_corners = True
tensor([[[[1.0000, 1.3333, 1.6667, 2.0000],
[1.6667, 2.0000, 2.3333, 2.6667],
[2.3333, 2.6667, 3.0000, 3.3333],
[3.0000, 3.3333, 3.6667, 4.0000]]]])
nn.ConvTranspose2d
nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride=1, padding=0, output_padding=0, groups=1, bias=True, dilation=1)
参数:
- in_channels(int) – 输入信号的通道数
- out_channels(int) – 卷积产生的通道数
- kerner_size(int or tuple) - 卷积核的大小
- stride(int or tuple,optional) - 卷积步长,即要将输入扩大的倍数。
- padding(int or tuple, optional) - 输入的每一条边补充0的层数,高宽都增加2*padding
- output_padding(int or tuple, optional) - 输出边补充0的层数,高宽都增加padding
- groups(int, optional) – 从输入通道到输出通道的阻塞连接数
- bias(bool, optional) - 如果bias=True,添加偏置
- dilation(int or tuple, optional) – 卷积核元素之间的间距
图示,是Pytorch的转置卷积的图示,注意其中的插值方法(用0填充像素,将输入feature map扩充)。