torch.nn.functional.grid_sample双线性采样计算结果不符求助
关于torch.nn.functional.grid_sample双线性插值计算的困惑
正在调试包含torch.nn.functional.grid_sample算子的神经网络,使用PyCharm查看调试过程中的数值:
- grid张量形状:
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,得到转换后的坐标为(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不符,无法理解输出值的计算逻辑,恳请帮助!
内容的提问来源于stack exchange,提问作者user9875189
相关产品推荐
相关产品推荐

