def mean_field(rv_constructor, *rv_args, **rv_kwargs): name = rv_kwargs['name'] if name not in kwargs.keys(): rv = rv_constructor(*rv_args, **rv_kwargs) loc, scale = get_or_init(name, rv.shape) # NB: name must be the same as original variable, # in order to be able to do black-box VI (setting # parameters to variational values obtained via trace). return Normal(loc=loc, scale=scale, name=name) else: rv_kwargs['value'] = kwargs[name] return rv_constructor(*rv_args, **rv_kwargs)
def mean_field(rv_constructor, *rv_args, **rv_kwargs): name = rv_kwargs['name'] if name not in kwargs.keys(): rv = rv_constructor(*rv_args, **rv_kwargs) try: a, b = param_params[name + '_a'], param_params[name + '_b'] except Exception as err: print('couldn\'t get centering params for variable {}: {}'. format(name, err)) a, b = 1., 1. loc, scale = get_or_init(name, a=a, b=b, shape=rv.shape) # NB: name must be the same as original variable, # in order to be able to do black-box VI (setting # parameters to variational values obtained via trace). return Normal(loc=loc, scale=scale, name=name) else: rv_kwargs['value'] = kwargs[name] return rv_constructor(*rv_args, **rv_kwargs)