def makemask(self, arg=0): # default: mask zero if isfunction(arg): self._mask = arg(self) elif isnumber(arg): self._mask = tensorops.eq(self, arg) else: raise Exception("wrong input argument type") return self
def wrapply(self, *args, **kwargs): # is this multi-output compatible? transform = None oldtrainmode = None olddebugmode = None global _TRAINMODE global _DEBUGMODE #print "{} train mode (in base.py)".format(_TRAINMODE) if "transform" in kwargs and kwargs["transform"] is not None: transform = kwargs.pop("transform") if "_trainmode" in kwargs: # changes global _TRAINMODE oldtrainmode = _TRAINMODE _TRAINMODE = kwargs.pop("_trainmode") if "_debugmode" in kwargs: # changes global _DEBUGMODE olddebugmode = _DEBUGMODE _DEBUGMODE = kwargs.pop("_debugmode") if "_batsize" in kwargs: batsize = kwargs.pop("_batsize") if "_trainmode" in inspect.getargspec(self.apply)[0]: kwargs["_trainmode"] = _TRAINMODE if "_debugmode" in inspect.getargspec(self.apply)[0]: kwargs["_debugmode"] = _DEBUGMODE # param pushing paramstopush = set( ) # params to transfer from input vars to output vars for var in recurfilter(lambda x: isinstance(x, Var), kwargs) + recurfilter( lambda x: isinstance(x, Var), args): paramstopush.update(var._params) updatestopush = _get_updates_from([args, kwargs]) # extra outs pushing extraoutstopush = {} for var in recurfilter(lambda x: isinstance(x, Var), kwargs) + recurfilter( lambda x: isinstance(x, Var), args): extraoutstopush.update(var._extra_outs) if transform is not None and isfunction(transform): args, kwargs = transform(*args, **kwargs) ret = self.apply( *args, **kwargs ) # ret carries params of its own --> these params have been added in this block possiblechildren = recurfilter(lambda x: isinstance(x, Var), ret) for p in possiblechildren: p.push_params(paramstopush) p.push_params(self.ownparams) p.push_updates(updatestopush) p.push_extra_outs(extraoutstopush) for k, v in self._param_settings_toprop.items(): for param in p.allparams.difference(paramstopush): if hasattr(param, k): setattr(param, k, v) if oldtrainmode is not None: # this was where we changed the global _TRAINMODE _TRAINMODE = oldtrainmode # put it back if olddebugmode is not None: _DEBUGMODE = olddebugmode return ret
def wrapf(attr, root=None): if isfunction(attr): # real function innerwrap = prefwrap(attr, root) #lambda *args, **kwargs: fwrap(attr, root, *args, **kwargs) elif isnumber(attr) or isstring(attr): # or other literals/non-syms/modules/properties/... return attr elif isinstance(attr, ModuleType): innerwrap = pwrap(attr) elif isinstance(attr, theano.Variable): innerwrap = vwrap(attr, root) else: innerwrap = attr return innerwrap
def wrapf(attr, root=None): if isfunction(attr): # real function innerwrap = OpBlock(attr, root) elif isnumber(attr) or isstring(attr): # or other literals/non-syms/modules/properties/... return attr elif isinstance(attr, ModuleType): innerwrap = WrappedAttr(attr) elif isinstance(attr, theano.Variable): innerwrap = Var(attr) if isinstance(root, Var): # propagate params innerwrap.push_params(root._params) else: innerwrap = attr return innerwrap
def wrapply(self, *args, **kwargs): # is this multi-output compatible? transform = None if "transform" in kwargs and kwargs["transform"] is not None: transform = kwargs.pop("transform") paramstopush = set() # params to transfer from input vars to output vars for var in recurfilter(lambda x: isinstance(x, Var), kwargs) + recurfilter(lambda x: isinstance(x, Var), args): paramstopush.update(var._params) if transform is not None and isfunction(transform): args, kwargs = transform(*args, **kwargs) ret = self.apply(*args, **kwargs) # ret carries params of its own --> these params have been added in this block possiblechildren = recurfilter(lambda x: isinstance(x, Var), ret) for p in possiblechildren: p.push_params(paramstopush) p.push_params(self.ownparams) return ret
def wrapply(self, *args, **kwargs): # is this multi-output compatible? transform = None if "transform" in kwargs and kwargs["transform"] is not None: transform = kwargs.pop("transform") paramstopush = set( ) # params to transfer from input vars to output vars for var in recurfilter(lambda x: isinstance(x, Var), kwargs) + recurfilter( lambda x: isinstance(x, Var), args): paramstopush.update(var._params) if transform is not None and isfunction(transform): args, kwargs = transform(*args, **kwargs) ret = self.apply( *args, **kwargs ) # ret carries params of its own --> these params have been added in this block possiblechildren = recurfilter(lambda x: isinstance(x, Var), ret) for p in possiblechildren: p.push_params(paramstopush) p.push_params(self.ownparams) return ret
def transform(self, f): assert (isfunction(f)) self.transf = f if f is not None and isfunction( f) else self.transf return self
def init(self, arg, *args, **kwargs): if isstring(arg): assert hasattr(self, arg) return getattr(self, arg)(*args, **kwargs) elif isfunction(arg): return self._init_helper(arg)
def transform(self, f): assert(isfunction(f)) self.transf = f if f is not None and isfunction(f) else self.transf return self