torch.setdefaulttensortype('torch.DoubleTensor')
torch.manualSeed(1)
-function checkGrad(model, criterion, input, target)
+function checkGrad(model, criterion, input, target, epsilon)
local params, gradParams = model:getParameters()
- local epsilon = 1e-5
+ local epsilon = epsilon or 1e-5
local output = model:forward(input)
local loss = criterion:forward(output, target)
:add(dag)
:add(nn.CAddTable())
+criterion = nn.MSECriterion()
+
+-- model:cuda()
+-- criterion:cuda()
+-- torch.setdefaulttensortype('torch.CudaTensor')
+-- epsilon = 1e-4
+
local input = torch.Tensor(30, 50):uniform()
local output = model:updateOutput(input):clone()
output:uniform()
-- Check that DAG:accGradParameters and friends work okay
-print('Gradient estimate error ' .. checkGrad(model, nn.MSECriterion(), input, output))
+print('Gradient estimate error ' .. checkGrad(model, criterion, input, output, epsilon))
-- Check that we can save and reload the model
model:clearState()
torch.save('/tmp/test.t7', model)
local otherModel = torch.load('/tmp/test.t7')
-print('Gradient estimate error ' .. checkGrad(otherModel, nn.MSECriterion(), input, output))
+print('Gradient estimate error ' .. checkGrad(otherModel, criterion, input, output, epsilon))