提交 57bec52f authored 作者: Razvan Pascanu's avatar Razvan Pascanu

mostly intendention

上级 d200d034
...@@ -246,96 +246,137 @@ class TestScan(unittest.TestCase): ...@@ -246,96 +246,137 @@ class TestScan(unittest.TestCase):
updates=updates, updates=updates,
allow_input_downcast=True) allow_input_downcast=True)
if n_steps is not None and abs(n_steps) == 1: if n_steps is not None and abs(n_steps) == 1:
assert len([x for x in my_f.maker.env.toposort() all_nodes = my_f.maker.env.toposort()
if isinstance(x.op, scan_module.scan_op.ScanOp)]) == 0 assert len([x for x in all_nodes
# Generating data if isinstance(x.op,ScanOp)]) == 0
# Scenario 1 : Good fit shapes print >>sys.stderr, ' n_steps', n_steps
inputs_values = [] print >>sys.stderr, ' go_backwards', go_backwards
for info in inputs_info:
taps = [x['tap'] for x in info] print >>sys.stderr, ' Scenario 1. Correct shape'
offset = abs(numpy.min([x for x in taps if x < 0])) if n_steps is not None:
offset += numpy.max([x for x in taps if x > 0]) _n_steps = n_steps
data = rng.uniform(size=(n_steps + offset, 4)) else:
inputs_values.append(data) _n_steps = 8
state_values = [] # Generating data
for info in states_info: # Scenario 1 : Good fit shapes
taps = [x['tap'] for x in info] input_values = []
offset = abs(numpy.min(taps)) for info in inputs_info:
data = rng.uniform(size=(offset, 4)) taps = [x['tap'] for x in info]
state_values.append(data) offset = 0
param_values = [rng.uniform(size=(4,)) for k in if len([x for x in taps if x < 0]) > 0:
xrange(n_parameters)] offset += abs(numpy.min([x for x in taps if x < 0]))
for var, val in zip(shared_vars, original_shared_values): if len([x for x in taps if x > 0]) > 0:
var.set_value(val) offset += numpy.max([x for x in taps if x > 0])
theano_outs = my_f(*(inputs_values + state_values + data = rng.uniform(size=(abs(_n_steps) + offset, 4))
param_values)) input_values.append(data)
args = ([n_steps, go_backwards] + state_values = []
input_values + for info in states_info:
state_values + taps = [x['tap'] for x in info]
param_values) offset = abs(numpy.min(taps))
rvals = execute_inner_graph(*args) if offset > 1:
numpy_outs, numpy_shared = rvals data = rng.uniform(size=(offset, 4))
assert len(numpy_outs) == len(theano_outs) else:
assert len(numpy_shared) == len(shared_vars) data = rng.uniform(size=(4,))
for th_out, num_out in zip(theano_outs, numpy_outs): data = numpy.arange(4)
assert numpy.allclose(th_out, num_out) state_values.append(data)
for th_out, num_out in zip(shared_outs, numpy_shared): param_values = [rng.uniform(size=(4,)) for k in
assert numpy.allclose(th_out.get_value(), num_out) xrange(n_parameters)]
# Scenario 2 : Loose fit (sequences longer then required) param_values = [numpy.arange(4) for k in
inputs_values = [] xrange(n_parameters)]
for pos, info in enumerate(inputs_info): for var, val in zip(shared_vars, original_shared_values):
taps = [x['tap'] for x in info] var.set_value(val)
offset = abs(numpy.min([x for x in taps if x < 0])) theano_outs = my_f(*(input_values + state_values +
offset += numpy.max([x for x in taps if x > 0]) param_values))
data = rng.uniform(size=(n_steps + offset + pos + 1, 4)) args = ([_n_steps, go_backwards] +
inputs_values.append(data) input_values +
state_values = [] state_values +
for pos, info in enumerate(states_info): param_values)
taps = [x['tap'] for x in info] rvals = execute_inner_graph(*args)
offset = abs(numpy.min(taps)) numpy_outs, numpy_shared = rvals
data = rng.uniform(size=(offset + pos + 1, 4)) assert len(numpy_outs) == len(theano_outs)
state_values.append(data) assert len(numpy_shared) == len(shared_vars)
param_values = [rng.uniform(size=(4,)) for k in for th_out, num_out in zip(theano_outs, numpy_outs):
xrange(n_parameters)] try:
for var, val in zip(shared_vars, original_shared_values): assert numpy.allclose(th_out, num_out)
var.set_value(val) except:
theano_outs = my_f(*(inputs_values + state_values + import ipdb; ipdb.set_trace()
param_values)) for th_out, num_out in zip(shared_vars, numpy_shared):
args = ([n_steps, go_backwards] + try:
input_values + assert numpy.allclose(th_out.get_value(), num_out)
state_values + except:
param_values) import ipdb; ipdb.set_trace()
rvals = execute_inner_graph(*args) # Scenario 2 : Loose fit (sequences longer then required)
numpy_outs, numpy_shared = rvals print >>sys.stderr, ' Scenario 2. Loose shapes'
assert len(numpy_outs) == len(theano_outs) input_values = []
assert len(numpy_shared) == len(shared_vars) for pos, info in enumerate(inputs_info):
for th_out, num_out in zip(theano_outs, numpy_outs): taps = [x['tap'] for x in info]
assert numpy.allclose(th_out, num_out) offset = 0
for th_out, num_out in zip(shared_outs, numpy_shared): if len([x for x in taps if x < 0]) > 0:
assert numpy.allclose(th_out.get_value(), num_out) offset += abs(numpy.min([x for x in taps if x < 0]))
# Scenario 3 : Less data then required if len([x for x in taps if x > 0]) > 0:
inputs_values = [] offset += numpy.max([x for x in taps if x > 0])
for pos, info in enumerate(inputs_info): if n_steps is not None:
taps = [x['tap'] for x in info] # loose inputs make sense only when n_steps is
offset = abs(numpy.min([x for x in taps if x < 0])) # defined
offset += numpy.max([x for x in taps if x > 0]) data = rng.uniform(size=(abs(_n_steps) + offset + pos + 1, 4))
data = rng.uniform(size=(n_steps + offset - 1, 4)) else:
inputs_values.append(data) data = rng.uniform(size=(abs(_n_steps) + offset, 4))
state_values = [] input_values.append(data)
for pos, info in enumerate(states_info): state_values = []
taps = [x['tap'] for x in info] for pos, info in enumerate(states_info):
offset = abs(numpy.min(taps)) taps = [x['tap'] for x in info]
data = rng.uniform(size=(offset - 1, 4)) offset = abs(numpy.min(taps))
state_values.append(data) if offset > 1:
param_values = [rng.uniform(size=(4,)) for k in data = rng.uniform(size=(offset + pos + 1, 4))
xrange(n_parameters)] else:
for var, val in zip(shared_vars, original_shared_values): data = rng.uniform(size=(4,))
var.set_value(val) state_values.append(data)
self.assertRaises(Exception, my_f, param_values = [rng.uniform(size=(4,)) for k in
inputs + state_values + param_values) xrange(n_parameters)]
for var, val in zip(shared_vars, original_shared_values):
def test000_generate_tests(self): var.set_value(val)
theano_outs = my_f(*(input_values + state_values +
param_values))
args = ([_n_steps, go_backwards] +
input_values +
state_values +
param_values)
rvals = execute_inner_graph(*args)
numpy_outs, numpy_shared = rvals
assert len(numpy_outs) == len(theano_outs)
assert len(numpy_shared) == len(shared_vars)
for th_out, num_out in zip(theano_outs, numpy_outs):
assert numpy.allclose(th_out, num_out)
for th_out, num_out in zip(shared_vars, numpy_shared):
assert numpy.allclose(th_out.get_value(), num_out)
# Scenario 3 : Less data then required
print >>sys.stderr, ' Scenario 2. Wrong shapes'
input_values = []
for pos, info in enumerate(inputs_info):
taps = [x['tap'] for x in info]
offset = 0
if len([x for x in taps if x < 0]) > 0:
offset += abs(numpy.min([x for x in taps if x < 0]))
if len([x for x in taps if x > 0]) > 0:
offset += numpy.max([x for x in taps if x > 0])
data = rng.uniform(size=(abs(_n_steps) + offset - 1, 4))
input_values.append(data)
state_values = []
for pos, info in enumerate(states_info):
taps = [x['tap'] for x in info]
offset = abs(numpy.min(taps))
data = rng.uniform(size=(offset - 1, 4))
state_values.append(data)
param_values = [rng.uniform(size=(4,)) for k in
xrange(n_parameters)]
for var, val in zip(shared_vars, original_shared_values):
var.set_value(val)
self.assertRaises(Exception, my_f,
inputs + state_values + param_values)
def test001_generate_tests(self):
rng = numpy.random.RandomState(utt.fetch_seed()) rng = numpy.random.RandomState(utt.fetch_seed())
all_inputs_info = [[]] all_inputs_info = [[]]
possible_taps_use_pairs = [[dict(tap=0, use=True)], possible_taps_use_pairs = [[dict(tap=0, use=True)],
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论