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

deleted commented blocks from tensor.opt

上级 502e02ab
...@@ -1474,253 +1474,4 @@ else: ...@@ -1474,253 +1474,4 @@ else:
_logger.debug("not enabling optimization fusion elemwise in fast_run") _logger.debug("not enabling optimization fusion elemwise in fast_run")
compile.optdb.register('elemwise_fusion', FusionOptimizer(), 71.00, 'fusion', 'local_elemwise_fusion') compile.optdb.register('elemwise_fusion', FusionOptimizer(), 71.00, 'fusion', 'local_elemwise_fusion')
# def make_composite(inputs, outputs):
# scalar_inputs = [scalar.Scalar(dtype = i.type.dtype)() for i in inputs]
# def transform(r):
# if r in inputs:
# return scalar_inputs[inputs.index(r)]
# node = r.owner
# if node is None:
# if isinstance(r, gof.Constant):
# if r.data.size == 1:
# return gof.Constant(scalar.Scalar(dtype = r.type.dtype), r.data)
# else:
# return scalar.Scalar(dtype = r.type.dtype)
# else:
# print r, inputs
# raise Exception('bluh')
# #return scalar.Scalar(dtype = r.type.dtype)
# elif isinstance(node.op, DimShuffle):
# new_r = transform(node.inputs[0])
# elif isinstance(node.op, Elemwise):
# new_r = node.op.scalar_op(*map(transform, node.inputs))
# else:
# raise Exception('bluh2')
# return new_r
# scalar_outputs = map(transform, outputs)
# return scalar.Composite(scalar_inputs, scalar_outputs)
# def loop_fusion(env):
# def grab(node, out, seen, grabbed, inputs, outputs):
# if node in grabbed:
# return True
# if node is None or isinstance(node, str) or node in seen:
# return False
# seen.add(node)
# if node and isinstance(node.op, Elemwise) and node.outputs[0].type.broadcastable == out.type.broadcastable:
# grabbed.add(node)
# for output in node.outputs:
# output_is_temp = True
# for node2, i in output.clients:
# grab(node2, out, seen, grabbed, inputs, outputs)
# if node2 not in grabbed:
# output_is_temp = False
# if not output_is_temp:
# outputs.add(output)
# for input in node.inputs:
# node2 = input.owner
# grab(node2, out, seen, grabbed, inputs, outputs)
# if node2 not in grabbed:
# inputs.add(input)
# return True
# elif node and isinstance(node.op, DimShuffle):
# input = node.inputs[0]
# if node.op.new_order[-input.type.ndim:] == range(input.type.ndim):
# inputs.add(input)
# grabbed.add(node)
# return True
# #return grab(node.inputs[0].owner, out, seen, grabbed, inputs, outputs)
# else:
# return False
# #for node in list(env.toposort()): # reversed(list(env.toposort())):
# for node in reversed(list(env.toposort())):
# if node in env.nodes and isinstance(node.op, Elemwise):
# inputs = set()
# outputs = set() # set(node.outputs)
# out = node.outputs[0]
# grab(node, out, set(), set(), inputs, outputs)
# if inputs == set(node.inputs) and outputs == set(node.outputs):
# continue
# print 'AAAAAAAAAAA', [__i in outputs for __i in inputs]
# inputs, outputs = list(inputs), list(outputs)
# composite = make_composite(inputs, outputs)
# #print composite
# #print gof.Env(*gof.graph.clone(inputs, outputs))
# new_node = Elemwise(composite).make_node(*inputs)
# print 'yea!!!!!', len(new_node.inputs), len(new_node.outputs)
# print new_node.outputs[0].type, outputs[0].type
# env.replace_all_validate(zip(outputs, new_node.outputs))
# print env
# gof.graph.io_toposort(env.inputs, env.outputs)
# compile.optdb.register('merge1.5', gof.MergeOptimizer(), 97, 'fast_run')
# loop_fusion = gof.optimizer(loop_fusion)
# compile.optdb.register('loop_fusion', loop_fusion, 98, 'fast_run')
# def grab_up(input, out, seen, inputs, outputs):
# if input in seen:
# return
# seen.add(input)
# node = input.owner
# if node and isinstance(node.op, Elemwise) and input.type.broadcastable == out.type.broadcastable:
# for input in node.inputs:
# grab_up(input, out, seen, inputs, outputs)
# for output in node.outputs:
# grab_down(output, out, seen, inputs, outputs)
# elif node and isinstance(node.op, DimShuffle):
# grab_up(node.inputs[0], out, seen, inputs, outputs)
# else:
# inputs.add(input)
# def grab_down(r, out, seen, inputs, outputs):
# for node, i in r.clients:
# if isinstance(node, str):
# outputs.add(r)
# elif isinstance(node.op, Elemwise) and node.outputs[0].type.broadcastable == out.type.broadcastable:
# for input in node.inputs:
# grab_up(input, out, seen, inputs, outputs)
# for output in node.outputs:
# grab_down(output, out, seen, inputs, outputs)
# else:
# outputs.add(r)
# for node in reversed(list(env.toposort())):
# if node in env.nodes and isinstance(node.op, Elemwise):
# inputs = set()
# outputs = set(node.outputs)
# out = node.outputs[0]
# for input in node.inputs:
# grab_up(input, out, set(), inputs, outputs)
# if inputs == set(node.inputs) and outputs == set(node.outputs):
# continue
# print 'AAAAAAAAAAA', [__i in outputs for __i in inputs]
# inputs, outputs = list(inputs), list(outputs)
# composite = make_composite(inputs, outputs)
# print composite
# print gof.Env(*gof.graph.clone(inputs, outputs))
# new_node = Elemwise(composite).make_node(*inputs)
# print 'yea!!!!!', len(new_node.inputs), len(new_node.outputs)
# env.replace_all_validate(zip(outputs, new_node.outputs))
# add(mul(input, neg(softplus(neg(*2 -> add(<Tensor(float64, matrix)>, InplaceDimShuffle{x,0}(b2)))))), mul(*1 -> sub([[ 1.]], input), neg(softplus(*2))))
# sub(neg(mul(input, Elemwise{sub}([[ 1.]], *3 -> Elemwise{scalar_sigmoid}(*2)))), neg(mul(*1, *3)))
# # for input in node.inputs:
# # i, o = grab_up(input, out)
# # inputs += i
# # outputs += o
# # aaaaaaaaaaaaaaa
# # i, o = [], []
# # for output in node.outputs:
# # variables = grab_down(output, out)
# # # if variables is None:
# # # return [input], []
# # i += variables[0]
# # o += variables[1]
# # return i, o
# inputs = []
# scalar_inputs = []
# these_inputs = []
# change = False
# for input in node.inputs:
# owner = input.owner
# if input.type.broadcastable == node.outputs[0].type.broadcastable \
# and owner and isinstance(owner.op, Elemwise):
# new_inputs = [i.type.to_scalar_type()() for i in owner.inputs]
# inputs += owner.inputs
# scalar_inputs += new_inputs
# these_inputs.append(owner.op.scalar_op(*new_inputs))
# change = True
# #elif
# else:
# inputs.append(input)
# scalar_input = input.type.to_scalar_type()()
# scalar_inputs.append(scalar_input)
# these_inputs.append(scalar_input)
# if not change:
# return False
# scalar_outputs = node.op.scalar_op.make_node(*these_inputs).outputs
# new_scalar_op = scalar.Composite(scalar_inputs, scalar_outputs)
# new_op = Elemwise(new_scalar_op)
# new_node = new_op.make_node(*inputs)
# ##print 'changed:', node, new_node.inputs
# ##print 'new!!', new_node
# print 'ding!', [input.type.broadcastable for input in new_node.inputs]
# return new_node.outputs
# @gof.local_optimizer([None, None])
# def local_loop_fusion(node):
# if not isinstance(node.op, Elemwise):
# return False
# ##print 'looking at:', node
# inputs = []
# scalar_inputs = []
# these_inputs = []
# change = False
# for input in node.inputs:
# owner = input.owner
# if input.type.broadcastable == node.outputs[0].type.broadcastable \
# and owner and isinstance(owner.op, Elemwise):
# new_inputs = [i.type.to_scalar_type()() for i in owner.inputs]
# inputs += owner.inputs
# scalar_inputs += new_inputs
# these_inputs.append(owner.op.scalar_op(*new_inputs))
# change = True
# #elif
# else:
# inputs.append(input)
# scalar_input = input.type.to_scalar_type()()
# scalar_inputs.append(scalar_input)
# these_inputs.append(scalar_input)
# if not change:
# return False
# scalar_outputs = node.op.scalar_op.make_node(*these_inputs).outputs
# new_scalar_op = scalar.Composite(scalar_inputs, scalar_outputs)
# new_op = Elemwise(new_scalar_op)
# new_node = new_op.make_node(*inputs)
# ##print 'changed:', node, new_node.inputs
# ##print 'new!!', new_node
# print 'ding!', [input.type.broadcastable for input in new_node.inputs]
# return new_node.outputs
# loop_fusion = gof.EquilibriumOptimizer([local_loop_fusion], max_depth = 3, max_use_ratio = 1)
# compile.optdb.register('loop_fusion', loop_fusion, 98, 'fast_run')
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论