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

czfnxgou  于 2022-11-29  发布在  其他
关注(0)|答案(3)|浏览(235)

我正在寻找一种方法,通过在图像的右下边缘添加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

看起来手电筒试图从两边填充图像!有没有简单的方法来覆盖这个并将Tensor填充到另一个图像的左上角?

l2osamch

l2osamch1#

我知道唯一办法是:

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

但我觉得不太值得推荐。
回答问题的标题

q35jwt9p

q35jwt9p2#

使用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]])
qxsslcnc

qxsslcnc3#

我也遇到过类似的问题,想用特定的颜色初始化一个图像Tensor。我解决了这个问题,如下所示:
设X是形状的Tensor(h,w,dim),dim有3个值(r,g,b),如果你想用rgb颜色226,169,41初始化TensorX,你可以这样做:

index_0 = torch.tensor([0]) # 226
index_1 = torch.tensor([1]) #169
index_2 = torch.tensor([2]) #41

X.index_fill_(2, index_0, 226)
X.index_fill_(2, index_1, 169)
X.index_fill_(2, index_2, 41)

相关问题