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)
Пример #2
0
    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)