diff options
author | soumith <soumith@gmail.com> | 2016-01-26 18:17:14 +0300 |
---|---|---|
committer | soumith <soumith@gmail.com> | 2016-01-26 18:17:14 +0300 |
commit | 0f2d96a6bb565a3e0cfd890d15d828808ebad39b (patch) | |
tree | 745e6c0da7bc2ea4647a977d755cebbc38bc18ac /test | |
parent | ae0c2e3d897aa5fa699530e25d026d7ba301965c (diff) |
syncing uptil master/R3 9bc3cbac4f054438f5e77824f868cd94e9e22f81
Diffstat (limited to 'test')
-rw-r--r-- | test/test.lua | 84 |
1 files changed, 80 insertions, 4 deletions
diff --git a/test/test.lua b/test/test.lua index e11f048..e4afe5a 100644 --- a/test/test.lua +++ b/test/test.lua @@ -5,9 +5,11 @@ local cudnntest = {} local precision_forward = 1e-4 local precision_backward = 1e-2 local precision_jac = 1e-3 +local precision_io = 1e-5 local nloop = 1 local times = {} local mytester +local jac = nn.Jacobian function cudnntest.SpatialConvolution_forward_batch() local bs = math.random(1,32) @@ -32,6 +34,11 @@ function cudnntest.SpatialConvolution_forward_batch() cutorch.synchronize() local error = rescuda:float() - groundtruth:float() mytester:assertlt(error:abs():max(), precision_forward, 'error on state (forward) ') + + -- IO + local ferr,berr = jac.testIO(gconv, input) + mytester:assertlt(ferr, precision_io, torch.typename(gconv) .. ' - i/o forward err ') + mytester:assertlt(berr, precision_io, torch.typename(gconv) .. ' - i/o backward err ') end @@ -175,7 +182,7 @@ function cudnntest.TemporalConvolution_batch() local input = torch.randn(bs,ini,inputFrameSize):cuda() local gradOutput = torch.randn(bs,outi,outputFrameSize):cuda() - local sconv = nn.TemporalConvolution(inputFrameSize,outputFrameSize, ki, si):cuda() + local sconv = nn.TemporalConvolution(inputFrameSize,outputFrameSize, ki, si):cuda() local groundForward = sconv:forward(input) sconv:zeroGradParameters() local groundgrad = sconv:backward(input, gradOutput, scale) @@ -228,7 +235,7 @@ function cudnntest.TemporalConvolution_padding_batch() local input = torch.Tensor(bs,ini - 2 * pad_h, inputFrameSize):cuda() input:copy(inputpadded:narrow(2, pad_h+1, ini - 2 * pad_h)) local gradOutput = torch.randn(bs,outi,outputFrameSize):cuda() - local sconv = nn.TemporalConvolution(inputFrameSize,outputFrameSize, ki, si):cuda() + local sconv = nn.TemporalConvolution(inputFrameSize,outputFrameSize, ki, si):cuda() local groundForward = sconv:forward(inputpadded) sconv:zeroGradParameters() local groundgrad = sconv:backward(inputpadded, gradOutput, scale) @@ -338,6 +345,11 @@ function cudnntest.VolumetricConvolution_forward_single() local error = rescuda:float() - groundtruth:float() mytester:assertlt(error:abs():max(), precision_forward, 'error on state (forward) ') + + -- IO + local ferr,berr = jac.testIO(gconv, input) + mytester:assertlt(ferr, precision_io, torch.typename(gconv) .. ' - i/o forward err ') + mytester:assertlt(berr, precision_io, torch.typename(gconv) .. ' - i/o backward err ') end function cudnntest.VolumetricConvolution_backward_single() @@ -433,6 +445,11 @@ function cudnntest.VolumetricMaxPooling_batch() mytester:assertlt(error:abs():max(), precision_forward, 'error on state (forward) ') error = resgrad:float() - groundgrad:float() mytester:assertlt(error:abs():max(), precision_backward, 'error on state (backward) ') + + -- IO + local ferr,berr = jac.testIO(gconv, input) + mytester:assertlt(ferr, precision_io, torch.typename(gconv) .. ' - i/o forward err ') + mytester:assertlt(berr, precision_io, torch.typename(gconv) .. ' - i/o backward err ') end function cudnntest.VolumetricMaxPooling_single() @@ -497,7 +514,7 @@ function cudnntest.SpatialMaxPooling_batch() local groundgrad = sconv:backward(input, gradOutput) cutorch.synchronize() local gconv = cudnn.SpatialMaxPooling(ki,kj,si,sj,padi,padj):cuda() - if ceil_mode then sconv:ceil() end + if ceil_mode then gconv:ceil() end local rescuda = gconv:forward(input) -- serialize and deserialize torch.save('modelTemp.t7', gconv) @@ -511,6 +528,11 @@ function cudnntest.SpatialMaxPooling_batch() mytester:assertlt(error:abs():max(), precision_forward, 'error on state (forward) ') error = resgrad:float() - groundgrad:float() mytester:assertlt(error:abs():max(), precision_backward, 'error on state (backward) ') + + -- IO + local ferr,berr = jac.testIO(gconv, input) + mytester:assertlt(ferr, precision_io, torch.typename(gconv) .. ' - i/o forward err ') + mytester:assertlt(berr, precision_io, torch.typename(gconv) .. ' - i/o backward err ') end function cudnntest.SpatialMaxPooling_single() @@ -535,7 +557,7 @@ function cudnntest.SpatialMaxPooling_single() local groundgrad = sconv:backward(input, gradOutput) cutorch.synchronize() local gconv = cudnn.SpatialMaxPooling(ki,kj,si,sj,padi,padj):cuda() - if ceil_mode then sconv:ceil() end + if ceil_mode then gconv:ceil() end local _ = gconv:forward(input) -- serialize and deserialize torch.save('modelTemp.t7', gconv) @@ -585,6 +607,11 @@ function cudnntest.SpatialAveragePooling_batch() mytester:assertlt(error:abs():max(), precision_forward, 'error on state (forward) ') error = resgrad:float() - groundgrad:float() mytester:assertlt(error:abs():max(), precision_backward, 'error on state (backward) ') + + -- IO + local ferr,berr = jac.testIO(gconv, input) + mytester:assertlt(ferr, precision_io, torch.typename(gconv) .. ' - i/o forward err ') + mytester:assertlt(berr, precision_io, torch.typename(gconv) .. ' - i/o backward err ') end function cudnntest.SpatialAveragePooling_single() @@ -729,6 +756,45 @@ function cudnntest.Sigmoid_batch() nonlinBatch('Sigmoid') end +function cudnntest.SpatialCrossMapLRN_batch() + local bs = math.random(4,10) + local inputSize = math.random(6,9) + local size = math.random(1,3)*2+1 + local nbfeatures = math.random(3,8) + local alpha = math.random(1,100)/100 + local beta = math.random(0,100)/100 + local k = math.random(1,3) + + local tm = {} + local title = string.format('SpatialCrossMapLRN.forward') + times[title] = tm + + local input = torch.rand(bs, nbfeatures, inputSize, inputSize):cuda() + local gradOutput = torch.rand(input:size()):cuda() + local sconv = nn.SpatialCrossMapLRN(size, alpha, beta, k):cuda() + local gconv = cudnn.SpatialCrossMapLRN(size, alpha, beta, k):cuda() + + local groundtruth = sconv:forward(input):clone() + local groundgrad = sconv:backward(input, gradOutput) + cutorch.synchronize() + gconv:forward(input) + -- serialize and deserialize + torch.save('modelTemp.t7', gconv) + gconv = torch.load('modelTemp.t7') + local rescuda = gconv:forward(input) + local resgrad = gconv:backward(input, gradOutput) + cutorch.synchronize() + mytester:asserteq(rescuda:dim(), 4, 'error in dimension') + mytester:asserteq(resgrad:dim(), 4, 'error in dimension') + local error = rescuda:float() - groundtruth:float() + mytester:assertlt(error:abs():max(), precision_forward, + 'error on state (forward) ') + error = resgrad:float() - groundgrad:float() + mytester:assertlt(error:abs():max(), precision_backward, + 'error on state (backward) ') +end + + function cudnntest.SoftMax_single() local sz = math.random(1,64) local input = torch.randn(sz):cuda() @@ -815,6 +881,11 @@ function cudnntest.SoftMax_batch() error = resgrad:float() - groundgrad:float() mytester:assertlt(error:abs():max(), precision_backward, 'error on state (backward) ') + + -- IO + local ferr,berr = jac.testIO(gconv, input) + mytester:assertlt(ferr, precision_io, torch.typename(gconv) .. ' - i/o forward err ') + mytester:assertlt(berr, precision_io, torch.typename(gconv) .. ' - i/o backward err ') end @@ -876,6 +947,11 @@ function cudnntest.LogSoftMax_batch() error = resgrad:float() - groundgrad:float() mytester:assertlt(error:abs():max(), precision_backward, 'error on state (backward) ') + + -- IO + local ferr,berr = jac.testIO(gconv, input) + mytester:assertlt(ferr, precision_io, torch.typename(gconv) .. ' - i/o forward err ') + mytester:assertlt(berr, precision_io, torch.typename(gconv) .. ' - i/o backward err ') end function cudnntest.SpatialLogSoftMax() |