【问题标题】:torch testJacobian works with DoubleTensor, not with CudaTensortorch testJacobian 与 DoubleTensor 一起使用,而不是与 CudaTensor 一起使用
【发布时间】:2016-08-01 19:48:23
【问题描述】:

我正在使用此模块开发神经网络:https://github.com/qassemoquab/stnbhwd/blob/master/AffineGridGeneratorBHWD.lua

nn.Jacobian.testJacobian 在我使用 CudaTensor 输入作为 :cuda() 运行模块时很大,但当我使用相同的 DoubleTensor 输入作为 :double() 运行它时则不是

:double() 运行的 :forward 和 :cuda() 运行非常接近。

:double() 运行和 :cuda() 运行的 :backward 完全不同,所以我认为问题出在 updateGradInput 方法的某个地方:

function AGG:updateGradInput(_transformMatrix, _gradGrid)
   local transformMatrix, gradGrid
   if _transformMatrix:nDimension()==2 then
      transformMatrix = addOuterDim(_transformMatrix)
      gradGrid = addOuterDim(_gradGrid)
   else
      transformMatrix = _transformMatrix
      gradGrid = _gradGrid
   end

   local batchsize = transformMatrix:size(1)
   local flattenedGradGrid = gradGrid:view(batchsize, self.width*self.height, 2)
   local flattenedBatchGrid = self.batchGrid:view(batchsize, self.width*self.height, 3)
   self.gradInput:resizeAs(transformMatrix):zero()
   self.gradInput:bmm(flattenedGradGrid:transpose(2,3), flattenedBatchGrid)

   if _transformMatrix:nDimension()==2 then
      self.gradInput = self.gradInput:select(1,1)
   end

   return self.gradInput
end

bmm 方法是我唯一不太熟悉的方法,因此我对其进行了测试,它与 :double() 和 :cuda() 给出了可比较的结果。

有人遇到过类似问题吗?在此期间,我将继续尝试追查问题...

编辑 为了说明差异的程度:

th> input = torch.randn(5,2,3)
th> cuda_input = torch.CudaTensor(5,2,3):copy(input)
th> module = nn.AffineGridGeneratorBHWD(50,50)
th> nn.Jacobian.testJacobian(module:double(), input)
5.9742433222709e-10
th> nn.Jacobian.testJacobian(module:cuda(), cuda_input)
0.31908118724823

我可能把问题出在 updateGradInput 方法上弄错了.... 还在纠结。

【问题讨论】:

    标签: lua neural-network torch


    【解决方案1】:

    这是意料之中的(不是错误或错误)。 Jacobian 测试需要足够高的精度,而 Float preicison (CudaTensor) 无法满足您的要求。

    【讨论】:

    • 当我在其他模块上的 testJacobian 中使用 CudaTensor 时,错误 is 比 DoubleTensor 大,但没有这么大......我认为使用较低精度的张量类型,我们应该期望更大的误差,但这并不会使该方法无用。如果我错了,请纠正我...
    • 用 FloatTensors 对其进行了测试,得到了同样的结果。 bmm 操作似乎像疯了一样复杂错误...感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多