我正在寻找一种通过在图像的右边缘和下边缘添加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
看来,手电筒试图从两侧填充图像!有没有简单的方法可以覆盖它并将张量填充到另一张图像的左上角?
答案 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
但是我怀疑它是推荐的。
回答问题的标题。