提交 823acacc authored 作者: Hengjean's avatar Hengjean

Refactorized Opt. Improved opt tests.

上级 481ad92d
......@@ -5,56 +5,42 @@ from theano.typed_list.basic import (Reverse,
Append, Extend, Insert)
@gof.local_optimizer([Reverse], inplace=True)
def local_inplace_reverse(node):
if isinstance(node.op, Reverse) and not node.op.inplace:
new_op = node.op.__class__(
inplace=True)
new_node = new_op(*node.inputs)
return [new_node]
return False
def generic_opt_creator(op):
@gof.local_optimizer([op], inplace=True)
def generic_inplace_opt(node):
if isinstance(node.op, op) and not node.op.inplace:
new_op = node.op.__class__(
inplace=True)
new_node = new_op(*node.inputs)
return [new_node]
return False
return generic_inplace_opt
local_inplace_reverse = generic_opt_creator(Reverse)
compile.optdb.register('local_inplace_reverse',
TopoOptimizer(local_inplace_reverse,
failure_callback=TopoOptimizer.warn_inplace), 60,
'fast_run', 'inplace') # DEBUG
'fast_run', 'inplace')
@gof.local_optimizer([Append], inplace=True)
def local_inplace_append(node):
if isinstance(node.op, Append) and not node.op.inplace:
new_op = node.op.__class__(
inplace=True)
new_node = new_op(*node.inputs)
return [new_node]
return False
local_inplace_append = generic_opt_creator(Append)
compile.optdb.register('local_inplace_append',
TopoOptimizer(local_inplace_append,
failure_callback=TopoOptimizer.warn_inplace), 60,
'fast_run', 'inplace') # DEBUG
'fast_run', 'inplace')
@gof.local_optimizer([Extend], inplace=True)
def local_inplace_extend(node):
if isinstance(node.op, Extend) and not node.op.inplace:
new_op = node.op.__class__(
inplace=True)
new_node = new_op(*node.inputs)
return [new_node]
return False
local_inplace_extend = generic_opt_creator(Extend)
compile.optdb.register('local_inplace_extend',
TopoOptimizer(local_inplace_extend,
failure_callback=TopoOptimizer.warn_inplace), 60,
'fast_run', 'inplace') # DEBUG
'fast_run', 'inplace')
@gof.local_optimizer([Insert], inplace=True)
def local_inplace_insert(node):
if isinstance(node.op, Insert) and not node.op.inplace:
new_op = node.op.__class__(
inplace=True)
new_node = new_op(*node.inputs)
return [new_node]
return False
local_inplace_insert = generic_opt_creator(Insert)
compile.optdb.register('local_inplace_insert',
TopoOptimizer(local_inplace_insert,
failure_callback=TopoOptimizer.warn_inplace), 60,
......
......@@ -30,6 +30,12 @@ class test_inplace(unittest.TestCase):
f = theano.function([In(mySymbolicMatricesList, borrow=True,
mutable=True)], z, accept_inplace=True)
self.assertTrue(f.maker.fgraph.toposort()[0].op.inplace)
x = rand_ranged_matrix(-1000, 1000, [100, 101])
y = rand_ranged_matrix(-1000, 1000, [100, 101])
self.assertTrue(numpy.array_equal(f([x, y]), [y, x]))
def test_append_inplace(self):
mySymbolicMatricesList = TypedListType(T.TensorType(
......@@ -41,6 +47,12 @@ class test_inplace(unittest.TestCase):
mutable=True), In(mySymbolicMatrix, borrow=True,
mutable=True)], z, accept_inplace=True)
self.assertTrue(f.maker.fgraph.toposort()[0].op.inplace)
x = rand_ranged_matrix(-1000, 1000, [100, 101])
y = rand_ranged_matrix(-1000, 1000, [100, 101])
self.assertTrue(numpy.array_equal(f([x], y), [x, y]))
def test_extend_inplace(self):
mySymbolicMatricesList1 = TypedListType(T.TensorType(
......@@ -56,6 +68,12 @@ class test_inplace(unittest.TestCase):
z)
self.assertTrue(f.maker.fgraph.toposort()[0].op.inplace)
x = rand_ranged_matrix(-1000, 1000, [100, 101])
y = rand_ranged_matrix(-1000, 1000, [100, 101])
self.assertTrue(numpy.array_equal(f([x], [y]), [x, y]))
def test_insert_inplace(self):
mySymbolicMatricesList = TypedListType(T.TensorType(
theano.config.floatX, (False, False)))()
......@@ -68,3 +86,10 @@ class test_inplace(unittest.TestCase):
mutable=True), mySymbolicIndex, mySymbolicMatrix],
z, accept_inplace=True)
self.assertTrue(f.maker.fgraph.toposort()[0].op.inplace)
x = rand_ranged_matrix(-1000, 1000, [100, 101])
y = rand_ranged_matrix(-1000, 1000, [100, 101])
self.assertTrue(numpy.array_equal(f([x], numpy.asarray(1,
dtype=theano.config.floatX), y), [x, y]))
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论