当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python PyTorch Upsample用法及代码示例


本文简要介绍python语言中 torch.nn.Upsample 的用法。

用法:

class torch.nn.Upsample(size=None, scale_factor=None, mode='nearest', align_corners=None)

参数

  • size(int或者元组[int] 或者元组[int,int] 或者元组[int,int,int],可选的) - 输出空间大小

  • scale_factor(float或者元组[float] 或者元组[float,float] 或者元组[float,float,float],可选的) - 空间大小的乘数。如果它是元组,则必须匹配输入大小。

  • mode(str,可选的) -上采样算法:'nearest''linear''bilinear''bicubic''trilinear'之一。默认值:'nearest'

  • align_corners(bool,可选的) -如果 True ,输入和输出张量的角像素对齐,从而保留这些像素的值。这仅在 mode'linear''bilinear''trilinear' 时有效。默认值:False

对给定的多通道 1D(时间)、2D(空间)或 3D(体积)数据进行上采样。

假设输入数据的形式为minibatch x channels x [optional depth] x [optional height] x width.因此,对于空间输入,我们期待 4D 张量,对于体积输入,我们期待 5D 张量。

可用于上采样的算法分别是 3D、4D 和 5D 输入张量的最近邻和线性、双线性、双三次和三线性。

可以给出scale_factor 或目标输出size 来计算输出大小。 (你不能同时给出,因为它是模棱两可的)

形状:
  • 输入:

  • 输出: ,其中

警告

对于 align_corners = True ,线性插值模式( linearbilinearbicubictrilinear )不会按比例对齐输出和输入像素,因此输出值可能取决于输入大小。这是 0.3.1 之前这些模式的默认行为。从那时起,默认行为是 align_corners = False 。有关这如何影响输出的具体示例,请参见下文。

注意

如果你想要下采样/一般调整大小,你应该使用 interpolate()

例子:

>>> input = torch.arange(1, 5, dtype=torch.float32).view(1, 1, 2, 2)
>>> input
tensor([[[[ 1.,  2.],
          [ 3.,  4.]]]])

>>> m = nn.Upsample(scale_factor=2, mode='nearest')
>>> m(input)
tensor([[[[ 1.,  1.,  2.,  2.],
          [ 1.,  1.,  2.,  2.],
          [ 3.,  3.,  4.,  4.],
          [ 3.,  3.,  4.,  4.]]]])

>>> m = nn.Upsample(scale_factor=2, mode='bilinear')  # align_corners=False
>>> m(input)
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]]]])

>>> m = nn.Upsample(scale_factor=2, mode='bilinear', align_corners=True)
>>> m(input)
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]]]])

>>> # Try scaling the same data in a larger tensor
>>>
>>> input_3x3 = torch.zeros(3, 3).view(1, 1, 3, 3)
>>> input_3x3[:, :, :2, :2].copy_(input)
tensor([[[[ 1.,  2.],
          [ 3.,  4.]]]])
>>> input_3x3
tensor([[[[ 1.,  2.,  0.],
          [ 3.,  4.,  0.],
          [ 0.,  0.,  0.]]]])

>>> m = nn.Upsample(scale_factor=2, mode='bilinear')  # align_corners=False
>>> # Notice that values in top left corner are the same with the small input (except at boundary)
>>> m(input_3x3)
tensor([[[[ 1.0000,  1.2500,  1.7500,  1.5000,  0.5000,  0.0000],
          [ 1.5000,  1.7500,  2.2500,  1.8750,  0.6250,  0.0000],
          [ 2.5000,  2.7500,  3.2500,  2.6250,  0.8750,  0.0000],
          [ 2.2500,  2.4375,  2.8125,  2.2500,  0.7500,  0.0000],
          [ 0.7500,  0.8125,  0.9375,  0.7500,  0.2500,  0.0000],
          [ 0.0000,  0.0000,  0.0000,  0.0000,  0.0000,  0.0000]]]])

>>> m = nn.Upsample(scale_factor=2, mode='bilinear', align_corners=True)
>>> # Notice that values in top left corner are now changed
>>> m(input_3x3)
tensor([[[[ 1.0000,  1.4000,  1.8000,  1.6000,  0.8000,  0.0000],
          [ 1.8000,  2.2000,  2.6000,  2.2400,  1.1200,  0.0000],
          [ 2.6000,  3.0000,  3.4000,  2.8800,  1.4400,  0.0000],
          [ 2.4000,  2.7200,  3.0400,  2.5600,  1.2800,  0.0000],
          [ 1.2000,  1.3600,  1.5200,  1.2800,  0.6400,  0.0000],
          [ 0.0000,  0.0000,  0.0000,  0.0000,  0.0000,  0.0000]]]])

相关用法


注:本文由纯净天空筛选整理自pytorch.org大神的英文原创作品 torch.nn.Upsample。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。