diff options
-rw-r--r-- | init.lua | 9 | ||||
-rw-r--r-- | nnx-1.0-1.rockspec | 1 | ||||
-rw-r--r-- | test/CMakeLists.txt | 3 | ||||
-rw-r--r-- | test/jacobian.lua | 20 | ||||
-rw-r--r-- | test/test-all.lua | 48 |
5 files changed, 49 insertions, 32 deletions
@@ -2,7 +2,16 @@ require 'torch' require 'nn' +-- create global nnx table: +nnx = {} + +-- c lib: require 'libnnx' +-- for testing: +torch.include('nnx', 'jacobian.lua') +torch.include('nnx', 'test-all.lua') + +-- modules: torch.include('nnx', 'Narrow.lua') torch.include('nnx', 'SpatialLinear.lua') diff --git a/nnx-1.0-1.rockspec b/nnx-1.0-1.rockspec index 48946a2..e34aa0b 100644 --- a/nnx-1.0-1.rockspec +++ b/nnx-1.0-1.rockspec @@ -49,6 +49,7 @@ build = { install_files(/lua/nnx init.lua) install_files(/lua/nnx Narrow.lua) install_files(/lua/nnx SpatialLinear.lua) + add_subdirectory (test) install_targets(/lib nnx) ]], diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt new file mode 100644 index 0000000..7156a37 --- /dev/null +++ b/test/CMakeLists.txt @@ -0,0 +1,3 @@ + +install_files(/lua/nnx jacobian.lua) +install_files(/lua/nnx test-all.lua) diff --git a/test/jacobian.lua b/test/jacobian.lua index 2ceb08f..a88a13a 100644 --- a/test/jacobian.lua +++ b/test/jacobian.lua @@ -3,7 +3,9 @@ require 'torch' require 'nn' require 'random' -function get_jac_bprop (module, input, param, dparam) +nnx.jacobian = {} + +function nnx.jacobian.get_jac_bprop (module, input, param, dparam) local doparam = 0 if param then doparam = 1 @@ -30,7 +32,7 @@ function get_jac_bprop (module, input, param, dparam) return jacobian end -function get_jac_fprop(module, input, param) +function nnx.jacobian.get_jac_fprop(module, input, param) param = param or input -- perturbation amount local small = 1e-6 @@ -56,30 +58,30 @@ function get_jac_fprop(module, input, param) return jacobian end -function test_jac (module, input, minval, maxval) +function nnx.jacobian.test_jac (module, input, minval, maxval) minval = minval or -2 maxval = maxval or 2 local inrange = maxval - minval input:copy(lab.rand(input:nElement()):mul(inrange):add(minval)) - local jac_fprop = get_jac_fprop(module,input) - local jac_bprop = get_jac_bprop(module,input) + local jac_fprop = nnx.jacobian.get_jac_fprop(module,input) + local jac_bprop = nnx.jacobian.get_jac_bprop(module,input) local error = jac_fprop:dist(jac_bprop,2) return error end -function test_jac_param (module, input, param, dparam, minval, maxval) +function nnx.jacobian.test_jac_param (module, input, param, dparam, minval, maxval) minval = minval or -2 maxval = maxval or 2 local inrange = maxval - minval input:copy(lab.rand(input:nElement()):mul(inrange):add(minval)) param:copy(lab.rand(param:nElement()):mul(inrange):add(minval)) - jac_bprop = get_jac_bprop(module, input, param, dparam) - jac_fprop = get_jac_fprop(module, input, param) + jac_bprop = nnx.jacobian.get_jac_bprop(module, input, param, dparam) + jac_fprop = nnx.jacobian.get_jac_fprop(module, input, param) local error = jac_fprop:dist(jac_bprop,2) return error end -function testwriting(module,input, minval, maxval) +function nnx.jacobian.test_io(module,input, minval, maxval) minval = minval or -2 maxval = maxval or 2 local inrange = maxval - minval diff --git a/test/test-all.lua b/test/test-all.lua index ce2e003..17616b7 100644 --- a/test/test-all.lua +++ b/test/test-all.lua @@ -1,32 +1,34 @@ -require 'nnx' -require 'lunit' -require 'jacobian' +function nnx.test_all() -module("test_ops", lunit.testcase, package.seeall) + require 'lunit' + module("test_all", lunit.testcase, package.seeall) -precision = 1e-6 + local precision = 1e-6 -function test_SpatialLinear() - local fanin = math.random(1,10) - local fanout = math.random(1,10) - local sizex = math.random(4,16) - local sizey = math.random(4,16) - local module = nn.SpatialLinear(fanin, fanout) - local input = lab.rand(fanin,sizey,sizex) + local jac = nnx.jacobian - local error = test_jac(module, input) - assert_equal((error < precision), true, 'error on state: ' .. error) + function test_SpatialLinear() + local fanin = math.random(1,10) + local fanout = math.random(1,10) + local sizex = math.random(4,16) + local sizey = math.random(4,16) + local module = nn.SpatialLinear(fanin, fanout) + local input = lab.rand(fanin,sizey,sizex) - local error = test_jac_param(module, input, module.weight, module.gradWeight) - assert_equal((error < precision), true, 'error on weight: ' .. error) + local error = jac.test_jac(module, input) + assert_equal((error < precision), true, 'error on state: ' .. error) - local error = test_jac_param(module, input, module.bias, module.gradBias) - assert_equal((error < precision), true, 'error on bias: ' .. error) + local error = jac.test_jac_param(module, input, module.weight, module.gradWeight) + assert_equal((error < precision), true, 'error on weight: ' .. error) - local ferr, berr = testwriting(module, input) - assert_equal(0, ferr, 'error in forward after i/o') - assert_equal(0, berr, 'error in backward after i/o') -end + local error = jac.test_jac_param(module, input, module.bias, module.gradBias) + assert_equal((error < precision), true, 'error on bias: ' .. error) + + local ferr, berr = jac.test_io(module, input) + assert_equal(0, ferr, 'error in forward after i/o') + assert_equal(0, berr, 'error in backward after i/o') + end -lunit.main() + lunit.main() +end |