提交 096c375f authored 作者: Frederic Bastien's avatar Frederic Bastien

make the test faster in debug mode.

上级 d5c66369
...@@ -5,6 +5,7 @@ from theano.compile.sharedvalue import shared ...@@ -5,6 +5,7 @@ from theano.compile.sharedvalue import shared
from theano.compile.pfunc import pfunc from theano.compile.pfunc import pfunc
from theano import tensor from theano import tensor
import theano.tensor.nnet import theano.tensor.nnet
from theano import config
import theano.tensor.nnet.conv as conv import theano.tensor.nnet.conv as conv
import theano.tensor.signal.downsample as downsample import theano.tensor.signal.downsample as downsample
...@@ -48,7 +49,9 @@ def print_diff_mode(a,b): ...@@ -48,7 +49,9 @@ def print_diff_mode(a,b):
if a != None and isinstance(a,(theano.compile.ProfileMode,)) and isinstance(b,(theano.compile.ProfileMode,)): if a != None and isinstance(a,(theano.compile.ProfileMode,)) and isinstance(b,(theano.compile.ProfileMode,)):
a.print_diff_summary(b) a.print_diff_summary(b)
def run_nnet(use_gpu, n_batch=60, n_in=1024, n_hid=2048, n_out=10, n_iter=100): def run_nnet(use_gpu, n_batch=60, n_in=1024, n_hid=2048, n_out=10, n_train=100):
if config.mode=='DEBUG_MODE': n_train=1
if use_gpu: if use_gpu:
w = tcn.shared_constructor(0.01*(my_rand(n_in,n_hid)-0.5), 'w') w = tcn.shared_constructor(0.01*(my_rand(n_in,n_hid)-0.5), 'w')
...@@ -88,7 +91,7 @@ def run_nnet(use_gpu, n_batch=60, n_in=1024, n_hid=2048, n_out=10, n_iter=100): ...@@ -88,7 +91,7 @@ def run_nnet(use_gpu, n_batch=60, n_in=1024, n_hid=2048, n_out=10, n_iter=100):
t0 = time.time() t0 = time.time()
rval = [] rval = []
for i in xrange(n_iter): for i in xrange(n_train):
rval.append(train(xval, yval, lr)) rval.append(train(xval, yval, lr))
dt = time.time() - t0 dt = time.time() - t0
...@@ -110,11 +113,11 @@ def test_run_nnet(): ...@@ -110,11 +113,11 @@ def test_run_nnet():
def test_run_nnet_med(): def test_run_nnet_med():
numpy.random.seed(23456) numpy.random.seed(23456)
rval_cpu = run_nnet(False, 10, 128, 50, 4, n_iter=10000) rval_cpu = run_nnet(False, 10, 128, 50, 4, n_train=10000)
def test_run_nnet_small(): def test_run_nnet_small():
numpy.random.seed(23456) numpy.random.seed(23456)
rval_cpu = run_nnet(False, 10, 10, 4, 4, n_iter=100000) rval_cpu = run_nnet(False, 10, 10, 4, 4, n_train=100000)
def run_conv_nnet1(use_gpu): def run_conv_nnet1(use_gpu):
if use_gpu: if use_gpu:
...@@ -125,6 +128,8 @@ def run_conv_nnet1(use_gpu): ...@@ -125,6 +128,8 @@ def run_conv_nnet1(use_gpu):
n_kern = 20 n_kern = 20
shape_img = (n_batch, 1, 32, 32) shape_img = (n_batch, 1, 32, 32)
shape_kern = (n_kern, 1, 5, 5) shape_kern = (n_kern, 1, 5, 5)
n_train=10
if config.mode=='DEBUG_MODE': n_train=1
logical_hid_shape = tcn.blas.GpuConv.logical_output_shape_2d(shape_img[2:],shape_kern[2:], 'valid') logical_hid_shape = tcn.blas.GpuConv.logical_output_shape_2d(shape_img[2:],shape_kern[2:], 'valid')
n_hid = n_kern * logical_hid_shape[0] * logical_hid_shape[1] n_hid = n_kern * logical_hid_shape[0] * logical_hid_shape[1]
...@@ -163,7 +168,7 @@ def run_conv_nnet1(use_gpu): ...@@ -163,7 +168,7 @@ def run_conv_nnet1(use_gpu):
yval = my_rand(n_batch, n_out) yval = my_rand(n_batch, n_out)
lr = theano._asarray(0.01, dtype='float32') lr = theano._asarray(0.01, dtype='float32')
for i in xrange(10): for i in xrange(n_train):
rval = train(xval, yval, lr) rval = train(xval, yval, lr)
print 'training done' print 'training done'
print_mode(mode) print_mode(mode)
...@@ -205,6 +210,7 @@ def run_conv_nnet2(use_gpu): # pretend we are training LeNet for MNIST ...@@ -205,6 +210,7 @@ def run_conv_nnet2(use_gpu): # pretend we are training LeNet for MNIST
shape_kern1 = (n_kern1, n_kern, 5, 5) shape_kern1 = (n_kern1, n_kern, 5, 5)
n_train=30 n_train=30
if config.mode=='DEBUG_MODE': n_train=1
logical_hid_shape = tcn.blas.GpuConv.logical_output_shape_2d(tuple(shape_img[2:]),tuple(shape_kern[2:]), 'valid') logical_hid_shape = tcn.blas.GpuConv.logical_output_shape_2d(tuple(shape_img[2:]),tuple(shape_kern[2:]), 'valid')
logical_hid_shape1 = tcn.blas.GpuConv.logical_output_shape_2d((logical_hid_shape[0]/2, logical_hid_shape[1]/2), tuple(shape_kern1[2:]), 'valid') logical_hid_shape1 = tcn.blas.GpuConv.logical_output_shape_2d((logical_hid_shape[0]/2, logical_hid_shape[1]/2), tuple(shape_kern1[2:]), 'valid')
...@@ -263,7 +269,7 @@ def test_conv_nnet2(): ...@@ -263,7 +269,7 @@ def test_conv_nnet2():
print rval_cpu[0], rval_gpu[0],rval_cpu[0]-rval_gpu[0] print rval_cpu[0], rval_gpu[0],rval_cpu[0]-rval_gpu[0]
assert numpy.allclose(rval_cpu, rval_gpu,rtol=1e-4,atol=1e-4) assert numpy.allclose(rval_cpu, rval_gpu,rtol=1e-4,atol=1e-4)
def run_conv_nnet2_classif(use_gpu, isize, ksize, n_batch, n_iter, def run_conv_nnet2_classif(use_gpu, isize, ksize, n_batch, n_train,
downsample_ops=True, verbose=0, version=-1): downsample_ops=True, verbose=0, version=-1):
if use_gpu: if use_gpu:
shared_fn = tcn.shared_constructor shared_fn = tcn.shared_constructor
...@@ -341,9 +347,9 @@ def run_conv_nnet2_classif(use_gpu, isize, ksize, n_batch, n_iter, ...@@ -341,9 +347,9 @@ def run_conv_nnet2_classif(use_gpu, isize, ksize, n_batch, n_iter,
yval = my_rand(n_batch,n_out) yval = my_rand(n_batch,n_out)
lr = theano._asarray(0.01, dtype='float32') lr = theano._asarray(0.01, dtype='float32')
rvals=my_zeros(n_iter) rvals=my_zeros(n_train)
t0 = time.time() t0 = time.time()
for i in xrange(n_iter): for i in xrange(n_train):
rvals[i] = train(xval, yval, lr)[0] rvals[i] = train(xval, yval, lr)[0]
t1 = time.time() t1 = time.time()
print_mode(mode) print_mode(mode)
...@@ -351,7 +357,7 @@ def run_conv_nnet2_classif(use_gpu, isize, ksize, n_batch, n_iter, ...@@ -351,7 +357,7 @@ def run_conv_nnet2_classif(use_gpu, isize, ksize, n_batch, n_iter,
def cmp_run_conv_nnet2_classif(seed, isize, ksize, bsize, def cmp_run_conv_nnet2_classif(seed, isize, ksize, bsize,
ignore_error=False, ignore_error=False,
n_iter=10, n_train=10,
gpu_only=False, gpu_only=False,
cpu_only=False, cpu_only=False,
float_atol=1e-06, float_atol=1e-06,
...@@ -364,6 +370,8 @@ def cmp_run_conv_nnet2_classif(seed, isize, ksize, bsize, ...@@ -364,6 +370,8 @@ def cmp_run_conv_nnet2_classif(seed, isize, ksize, bsize,
check_isfinite: the debug mode option. We forward this value to debug mode. check_isfinite: the debug mode option. We forward this value to debug mode.
For some parameter CrossentropyCategorical1Hot op generate inf when not optimized. For some parameter CrossentropyCategorical1Hot op generate inf when not optimized.
""" """
if config.mode=='DEBUG_MODE': n_train=1
numpy.random.seed(seed) numpy.random.seed(seed)
import theano.tensor.basic import theano.tensor.basic
...@@ -381,7 +389,7 @@ def cmp_run_conv_nnet2_classif(seed, isize, ksize, bsize, ...@@ -381,7 +389,7 @@ def cmp_run_conv_nnet2_classif(seed, isize, ksize, bsize,
theano.tensor.basic.float32_atol=float_atol theano.tensor.basic.float32_atol=float_atol
if not cpu_only: if not cpu_only:
rval_gpu, tg, gpu_mode = run_conv_nnet2_classif(True, rval_gpu, tg, gpu_mode = run_conv_nnet2_classif(True,
isize, ksize, bsize, n_iter, verbose=verbose, version=version) isize, ksize, bsize, n_train, verbose=verbose, version=version)
finally: finally:
predefined_modes["DEBUG_MODE"].check_isfinite = orig_check_isfinite predefined_modes["DEBUG_MODE"].check_isfinite = orig_check_isfinite
theano.tensor.basic.float32_atol=orig_float32_atol theano.tensor.basic.float32_atol=orig_float32_atol
...@@ -393,7 +401,7 @@ def cmp_run_conv_nnet2_classif(seed, isize, ksize, bsize, ...@@ -393,7 +401,7 @@ def cmp_run_conv_nnet2_classif(seed, isize, ksize, bsize,
try: try:
predefined_modes["DEBUG_MODE"].check_isfinite = check_isfinite predefined_modes["DEBUG_MODE"].check_isfinite = check_isfinite
numpy.random.seed(seed) numpy.random.seed(seed)
rval_cpu, tc, cpu_mode = run_conv_nnet2_classif(False, isize, ksize, bsize, n_iter, rval_cpu, tc, cpu_mode = run_conv_nnet2_classif(False, isize, ksize, bsize, n_train,
verbose=verbose, version=version) verbose=verbose, version=version)
if pickle and isinstance(cpu_mode,(theano.compile.ProfileMode,)): if pickle and isinstance(cpu_mode,(theano.compile.ProfileMode,)):
import pickle import pickle
...@@ -414,11 +422,11 @@ def cmp_run_conv_nnet2_classif(seed, isize, ksize, bsize, ...@@ -414,11 +422,11 @@ def cmp_run_conv_nnet2_classif(seed, isize, ksize, bsize,
print "gpu:", rval_gpu print "gpu:", rval_gpu
print "abs diff:", numpy.absolute(rval_gpu-rval_cpu) print "abs diff:", numpy.absolute(rval_gpu-rval_cpu)
print "time cpu: %.3f, time gpu: %.3f, speed up %f"%(tc, tg, tc/tg) print "time cpu: %.3f, time gpu: %.3f, speed up %f"%(tc, tg, tc/tg)
print "estimated time for one pass through MNIST with cpu: %f" % (tc * (60000.0 / (n_iter*bsize))) print "estimated time for one pass through MNIST with cpu: %f" % (tc * (60000.0 / (n_train*bsize)))
print "estimated time for one pass through MNIST with gpu: %f" % (tg * (60000.0 / (n_iter*bsize))) print "estimated time for one pass through MNIST with gpu: %f" % (tg * (60000.0 / (n_train*bsize)))
else: else:
print "time cpu: %.3f"%(tc) print "time cpu: %.3f"%(tc)
print "estimated time for one pass through MNIST with cpu: %f" % (tc * (60000.0 / (n_iter*bsize))) print "estimated time for one pass through MNIST with cpu: %f" % (tc * (60000.0 / (n_train*bsize)))
if not ignore_error and not cpu_only and not gpu_only: if not ignore_error and not cpu_only and not gpu_only:
assert numpy.allclose(rval_cpu, rval_gpu,rtol=1e-3,atol=float_atol) assert numpy.allclose(rval_cpu, rval_gpu,rtol=1e-3,atol=float_atol)
...@@ -430,52 +438,52 @@ verbose=0 ...@@ -430,52 +438,52 @@ verbose=0
version=-1 version=-1
def test_lenet_28(): #MNIST def test_lenet_28(): #MNIST
cmp_run_conv_nnet2_classif(23485, 28, 5, 60, n_iter=10, cmp_run_conv_nnet2_classif(23485, 28, 5, 60, n_train=10,
ignore_error=ignore_error, gpu_only=gpu_only, ignore_error=ignore_error, gpu_only=gpu_only,
cpu_only=cpu_only, verbose=verbose, version=version) cpu_only=cpu_only, verbose=verbose, version=version)
def test_lenet_32(): #CIFAR10 / Shapeset def test_lenet_32(): #CIFAR10 / Shapeset
cmp_run_conv_nnet2_classif(23485, 32, 5, 60, n_iter=10, cmp_run_conv_nnet2_classif(23485, 32, 5, 60, n_train=10,
ignore_error=ignore_error, gpu_only=gpu_only, ignore_error=ignore_error, gpu_only=gpu_only,
verbose=verbose, version=version) verbose=verbose, version=version)
def test_lenet_32_long(): #CIFAR10 / Shapeset def test_lenet_32_long(): #CIFAR10 / Shapeset
# this tests the gradient of downsample on the GPU, # this tests the gradient of downsample on the GPU,
# which does not recieve specific testing # which does not recieve specific testing
cmp_run_conv_nnet2_classif(23485, 32, 5, 30, n_iter=50, cmp_run_conv_nnet2_classif(23485, 32, 5, 30, n_train=50,
ignore_error=ignore_error, gpu_only=gpu_only, ignore_error=ignore_error, gpu_only=gpu_only,
cpu_only=cpu_only, verbose=verbose, version=version) cpu_only=cpu_only, verbose=verbose, version=version)
def test_lenet_64(): # ??? def test_lenet_64(): # ???
#float_atol need to pass in debug mode #float_atol need to pass in debug mode
#needed as cpu use extended precision and gpu don't #needed as cpu use extended precision and gpu don't
cmp_run_conv_nnet2_classif(23485, 64, 7, 10, n_iter=10, cmp_run_conv_nnet2_classif(23485, 64, 7, 10, n_train=10,
ignore_error=ignore_error, gpu_only=gpu_only, ignore_error=ignore_error, gpu_only=gpu_only,
cpu_only=cpu_only, verbose=verbose, cpu_only=cpu_only, verbose=verbose,
float_atol=5e-4, check_isfinite=True, version=version) float_atol=5e-4, check_isfinite=True, version=version)
def test_lenet_108(): # NORB def test_lenet_108(): # NORB
cmp_run_conv_nnet2_classif(23485, 108, 7, 5, n_iter=4, cmp_run_conv_nnet2_classif(23485, 108, 7, 5, n_train=4,
ignore_error=ignore_error, gpu_only=gpu_only, ignore_error=ignore_error, gpu_only=gpu_only,
cpu_only=cpu_only, verbose=verbose, cpu_only=cpu_only, verbose=verbose,
check_isfinite=True, version=version, float_atol=7e-2) check_isfinite=True, version=version, float_atol=7e-2)
def test_lenet_256(): # ImageNet def test_lenet_256(): # ImageNet
cmp_run_conv_nnet2_classif(23485, 256, 9, 2, n_iter=5, cmp_run_conv_nnet2_classif(23485, 256, 9, 2, n_train=5,
ignore_error=ignore_error, gpu_only=gpu_only, ignore_error=ignore_error, gpu_only=gpu_only,
cpu_only=cpu_only, verbose=verbose, cpu_only=cpu_only, verbose=verbose,
check_isfinite=True, version=version) check_isfinite=True, version=version)
#I did a wanted error in the name as we don't want it to execute automatically for now as it don't work #I did a wanted error in the name as we don't want it to execute automatically for now as it don't work
def tes_lenet_hd(): #HD 720p: 1280(wid)x720(len) def tes_lenet_hd(): #HD 720p: 1280(wid)x720(len)
cmp_run_conv_nnet2_classif(23485, (720,1280), 9, 2, n_iter=3, cmp_run_conv_nnet2_classif(23485, (720,1280), 9, 2, n_train=3,
ignore_error=ignore_error, gpu_only=gpu_only, ignore_error=ignore_error, gpu_only=gpu_only,
cpu_only=cpu_only, verbose=verbose, cpu_only=cpu_only, verbose=verbose,
check_isfinite=True, version=version) check_isfinite=True, version=version)
#I did a wanted error in the name as we don't want it to execute automatically for now as it don't work #I did a wanted error in the name as we don't want it to execute automatically for now as it don't work
def tes_lenet_full_hd(): #HD 1080p: 1920(wid)x1080(len) def tes_lenet_full_hd(): #HD 1080p: 1920(wid)x1080(len)
cmp_run_conv_nnet2_classif(23485, (1080,1920), 9, 2, n_iter=3, cmp_run_conv_nnet2_classif(23485, (1080,1920), 9, 2, n_train=3,
ignore_error=ignore_error, gpu_only=gpu_only, ignore_error=ignore_error, gpu_only=gpu_only,
cpu_only=cpu_only, verbose=verbose, cpu_only=cpu_only, verbose=verbose,
check_isfinite=True, version=version) check_isfinite=True, version=version)
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论