【发布时间】:2022-08-17 11:00:48
【问题描述】:
我正在调试一个内部有一个 torch.nn.functional.grid.sample 运算符的神经网络。使用 Pycharm IDE,我可以在调试期间观察值。我的网格是1*15*2张量,这里是第一批中的值。
我的输入是一个1*128*16*16张量,这里是第一批第一个通道中的值:。
我的输出是1*128*1*15张量,这里是第一批的第一个通道中的值。
align_corners = False,mode = \'bilinear\',padding_mode = \'zero\'。
对于网格坐标 (-1,-1),我可以理解值 (-4.74179) 是从左上角的 4 个值中采样的,其中 3 个是填充的 \'0\',其中 1 个是值 \'-18.96716\'.(-18.96716/4 = -4.74179)。
但是对于其他网格坐标,我很困惑。以值\'84.65594\'为例,其对应的网格坐标为(-0.45302, 0.53659)。我首先将它们从 (-1,1) 转换为 (0,15),方法是加 1,然后除以 2,然后乘以 15(参见 official implementation)。转换后的坐标是 (4.10235, 11.524425),我看到应该从中采样的四个值是:
(x)44.20010---0.10235---------(y)26.68777
| | |
| | |
0.524425---(a,b)--------------------
| | |
| | |
(w)102.18765---------------------(z)30.03996
这是我的手动计算,让:
a = 0.10235
b = 0.524425
x = 44.20010
y = 26.68777
z = 30.03996
w = 102.18765
插值应为:
output = a*b*z + (1 - a)*(1 - b)*x + (1 - a)*b*w + (1-b)*a*y
= 0.10235*0.524425*30.03996 + (1-0.10235)*(1-0.524425)*44.20010 + (1-
0.10235)*0.524425*102.18765 + (1-0.524425)*0.10235*26.68777
= 69.8852865171
这不是84.65594,我无法弄清楚输出中的值“84.65594”是如何计算的,请帮忙!
标签: pytorch bilinear-interpolation