在pytorch中,如何用另一个张量填充张量?

时间:2019-06-01 03:24:15

标签: pytorch tensor

我正在寻找一种通过在图像的右边缘和下边缘添加0值来扩展图像大小的方法。我最初的计划是使用nn.padding添加边缘,直到遇到此错误:

  File "/home/shared/virtualenv/dl-torch/lib/python3.7/site-packages/torch/nn/functional.py", line 2796, in pad
    assert len(pad) % 2 == 0, 'Padding length must be divisible by 2'
AssertionError: Padding length must be divisible by 2

看来,手电筒试图从两侧填充图像!有没有简单的方法可以覆盖它并将张量填充到另一张图像的左上角?

2 个答案:

答案 0 :(得分:1)

使用nn.ConstantPad2d,您可以分别指定所有四个方向上的填充元素数量。

>>> t = torch.randn(2,3)
>>> t
tensor([[ 0.1254,  0.6358,  0.3243],
        [ 0.7005, -0.4931,  1.0582]])
>>> p = torch.nn.ConstantPad2d((0, 4, 0, 2), 0)
>>> p(t)
tensor([[ 0.1254,  0.6358,  0.3243,  0.0000,  0.0000,  0.0000,  0.0000],
        [ 0.7005, -0.4931,  1.0582,  0.0000,  0.0000,  0.0000,  0.0000],
        [ 0.0000,  0.0000,  0.0000,  0.0000,  0.0000,  0.0000,  0.0000],
        [ 0.0000,  0.0000,  0.0000,  0.0000,  0.0000,  0.0000,  0.0000]])

答案 1 :(得分:0)

我知道的唯一方法是:

with torch.no_grad(): # assuming it's for init
  val = torch.distributions.MultivariateNormal(loc=zeros(2), scale=torch.eye(2))
  w.data =  val

但是我怀疑它是推荐的。

回答问题的标题