torch testJacobian 仅支持 DoubleTensor,不支持 CudaTensor
2016-4-11 15:45:53
收藏:0
阅读:66
评论:1
我在使用这个模块进行神经网络的工作: https://github.com/qassemoquab/stnbhwd/blob/master/AffineGridGeneratorBHWD.lua
当我使用 CudaTensor 输入进行 :cuda() 运行时,nn.Jacobian.testJacobian 非常大,但是使用相同的 DoubleTensor 输入时则不会发生这种情况。
:double() 和 :cuda() 运行的 :forward 很接近。
:double() 运行的 :backward 和 :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文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
这是预期的(不是错误或漏洞)。 Jacobian 测试需要足够高的精度,而 Float 精度(CudaTensor)无法提供这种精度。