提交 e618b15c authored 作者: James Bergstra's avatar James Bergstra

merge

...@@ -26,6 +26,10 @@ def print_mode(mode): ...@@ -26,6 +26,10 @@ def print_mode(mode):
if mode != None and isinstance(mode,(theano.compile.ProfileMode,)): if mode != None and isinstance(mode,(theano.compile.ProfileMode,)):
mode.print_summary() mode.print_summary()
def print_diff_mode(a,b):
if a != None and isinstance(a,(theano.compile.ProfileMode,)) and isinstance(b,(theano.compile.ProfileMode,)):
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_iter=100):
if use_gpu: if use_gpu:
...@@ -301,27 +305,64 @@ def run_conv_nnet2_classif(shared_fn, isize, ksize, n_batch, n_iter): ...@@ -301,27 +305,64 @@ def run_conv_nnet2_classif(shared_fn, isize, ksize, n_batch, n_iter):
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)
return rvals, t1-t0 return rvals, t1-t0, mode
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_iter=10,
gpu_only=False): gpu_only=False,
if gpu_only: float_atol=1e-08,
check_isfinite=True):
"""
float_atol: None mean use the default value.
check_isfinite: the debug mode option. We forward this value to debug mode.
For some parameter CrossentropyCategorical1Hot op generate inf when not optimized.
"""
numpy.random.seed(seed) numpy.random.seed(seed)
rval_gpu, t = run_conv_nnet2_classif(tcn.shared_constructor, isize, ksize, bsize)
import theano.tensor.basic
import theano.compile.debugmode
from theano.compile.mode import predefined_modes
orig_float32_atol = theano.tensor.basic.float32_atol
orig_check_isfinite = predefined_modes["DEBUG_MODE"].check_isfinite
try:
predefined_modes["DEBUG_MODE"].check_isfinite = check_isfinite
if float_atol:
print "float_atol",float_atol
theano.tensor.basic.float32_atol=float_atol
rval_gpu, tg, gpu_mode = run_conv_nnet2_classif(tcn.shared_constructor, isize, ksize, bsize, n_iter)
finally:
predefined_modes["DEBUG_MODE"].check_isfinite = orig_check_isfinite
theano.tensor.basic.float32_atol=orig_float32_atol
if gpu_only:
return return
try:
predefined_modes["DEBUG_MODE"].check_isfinite = check_isfinite
numpy.random.seed(seed) numpy.random.seed(seed)
rval_gpu, tg = run_conv_nnet2_classif(tcn.shared_constructor, isize, ksize, bsize, n_iter) rval_cpu, tc, cpu_mode = run_conv_nnet2_classif(shared, isize, ksize, bsize, n_iter)
numpy.random.seed(seed) if isinstance(cpu_mode,(theano.compile.ProfileMode,)):
rval_cpu, tc = run_conv_nnet2_classif(shared, isize, ksize, bsize, n_iter) import pickle
print "BEGIN GPU profile mode dump"
#print pickle.dumps(gpu_mode)
print "END GPU profile mode dump"
print "BEGIN CPU profile mode dump"
print pickle.dumps(cpu_mode)
print "END CPU profile mode dump"
finally:
predefined_modes["DEBUG_MODE"].check_isfinite = orig_check_isfinite
theano.tensor.basic.float32_atol=orig_float32_atol
print "cpu:", rval_cpu print "cpu:", rval_cpu
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: %f, time gpu: %f, speed up %f"%(tc, tg, tc/tg) print "time cpu: %f, time gpu: %f, speed up %f"%(tc, tg, tc/tg)
if not ignore_error: if not ignore_error:
assert numpy.allclose(rval_cpu, rval_gpu,rtol=1e-3,atol=1e-5) assert numpy.allclose(rval_cpu, rval_gpu,rtol=1e-3,atol=float_atol)
gpu_only=False gpu_only=False
ignore_error=False ignore_error=False
...@@ -341,23 +382,30 @@ def test_lenet_32_long(): #CIFAR10 / Shapeset ...@@ -341,23 +382,30 @@ def test_lenet_32_long(): #CIFAR10 / Shapeset
ignore_error=ignore_error, gpu_only=gpu_only) ignore_error=ignore_error, gpu_only=gpu_only)
def test_lenet_64(): # ??? def test_lenet_64(): # ???
#float_atol needd to pass in debug mode
#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_iter=10,
ignore_error=ignore_error, gpu_only=gpu_only) ignore_error=ignore_error, gpu_only=gpu_only,
float_atol=5e-4, check_isfinite=True)
def test_lenet_108(): # NORB def test_lenet_108(): # NORB
cmp_run_conv_nnet2_classif(23485, 108, 7, 10, n_iter=5, cmp_run_conv_nnet2_classif(23485, 108, 7, 10, n_iter=5,
ignore_error=ignore_error, gpu_only=gpu_only) ignore_error=ignore_error, gpu_only=gpu_only,
check_isfinite=True)
def test_lenet_256(): # ImageNet def test_lenet_256(): # ImageNet
cmp_run_conv_nnet2_classif(23485, 256, 9, 2, n_iter=3, cmp_run_conv_nnet2_classif(23485, 256, 9, 2, n_iter=3,
ignore_error=ignore_error, gpu_only=gpu_only) ignore_error=ignore_error, gpu_only=gpu_only,
check_isfinite=True)
#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_iter=3,
ignore_error=ignore_error, gpu_only=gpu_only) ignore_error=ignore_error, gpu_only=gpu_only,
check_isfinite=True)
#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_iter=3,
ignore_error=ignore_error, gpu_only=gpu_only) ignore_error=ignore_error, gpu_only=gpu_only,
check_isfinite=True)
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论