Toss it into the optimization pipeline to see the state of things at any given point. """ def __init__(self, header): self.header = header def apply(self, fgraph): import theano.printing print("PrintCurrentFunctionGraph:", self.header) theano.printing.debugprint(fgraph.outputs) optdb = gof.SequenceDB() optdb.register('merge1', gof.MergeOptimizer(), 0, 'fast_run', 'fast_compile', 'merge') # After scan1 opt at 0.5 and before ShapeOpt at 1 # This should only remove nodes. # The opt should not do anything that need shape inference. # New nodes that don't have infer_shape need that the original node # also don't have infer_shape local_useless = gof.optdb.LocalGroupDB(apply_all_opts=True, profile=True) optdb.register( 'useless', gof.optdb.TopoDB(local_useless, failure_callback=gof.opt.NavigatorOptimizer.warn_inplace), 0.6, 'fast_run', 'fast_compile') optdb.register('merge1.1', gof.MergeOptimizer(), 0.65, 'fast_run',
Toss it into the optimization pipeline to see the state of things at any given point. """ def __init__(self, header): self.header = header def apply(self, fgraph): import theano.printing print("PrintCurrentFunctionGraph:", self.header) theano.printing.debugprint(fgraph.outputs) optdb = gof.SequenceDB() optdb.register('merge1', gof.MergeOptimizer(), 0, 'fast_run', 'fast_compile', 'merge') # rearranges elemwise expressions optdb.register('canonicalize', gof.EquilibriumDB(ignore_newtrees=False), 1, 'fast_run', 'fast_compile', 'canonicalize_db') # Register in the canonizer Equilibrium as a clean up opt the merge opt. # Without this, as the equilibrium have ignore_newtrees=False, we # won't merge all nodes if it is set as a global optimizer with # final_opt=True. # We need a new instance of MergeOptimizer to don't have its name # changed by other usage of it. optdb['canonicalize'].register("merge", gof.opt.MergeOptimizer(), 'fast_run', "fast_compile", cleanup=True)
given point. """ def __init__(self, header): self.header = header def apply(self, fgraph): import theano.printing print("PrintCurrentFunctionGraph:", self.header) theano.printing.debugprint(fgraph.outputs) optdb = gof.SequenceDB() optdb.register("merge1", gof.MergeOptimizer(), 0, "fast_run", "fast_compile", "merge") # After scan1 opt at 0.5 and before ShapeOpt at 1 # This should only remove nodes. # The opt should not do anything that need shape inference. # New nodes that don't have infer_shape need that the original node # also don't have infer_shape local_useless = gof.optdb.LocalGroupDB(apply_all_opts=True, profile=True) optdb.register( "useless", gof.optdb.TopoDB( local_useless, failure_callback=gof.opt.NavigatorOptimizer.warn_inplace ), 0.6, "fast_run", "fast_compile",
# If a string is passed as the optimizer argument in the constructor # for Mode, it will be used as the key to retrieve the real optimizer # in this dictionary OPT_FAST_RUN = gof.Query(include = ['fast_run']) OPT_FAST_RUN_STABLE = OPT_FAST_RUN.requiring('stable') OPT_FAST_COMPILE = gof.Query(include = ['fast_compile']) OPT_STABILIZE = gof.Query(include = ['fast_run']) OPT_STABILIZE.position_cutoff = 1.5000001 predefined_optimizers = { None : lambda env: None, 'None' : lambda env: None, 'merge' : gof.MergeOptimizer(), 'fast_run' : OPT_FAST_RUN, 'fast_run_stable' : OPT_FAST_RUN_STABLE, 'fast_compile' : OPT_FAST_COMPILE, 'stabilize': OPT_STABILIZE } def register_optimizer(name, opt): """Add a `Optimizer` which can be referred to by `name` in `Mode`.""" if name in predefined_optimizers: raise ValueError('Optimizer name already taken: %s' % name) predefined_optimizers[name] = opt def register_OutputGuard_c_code(type): OutputGuard.c_code_types.append(type)