當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。