def __init__(self, N, K, A): self.A = A self.N = N self.K = K self.parameters = { "noise": ParameterArray(1. * tf.ones((1, 1))) } self.nodes = { "latent": GaussianArray.uniform((N, K)), "heterogeneity": GaussianArray.uniform((N, 1)), "product": GaussianArray.uniform((N, N, K)), "vector": GaussianArray.uniform((N, N, K+2)), "linear_predictor": GaussianArray.uniform((N, N)), "noisy_linear_predictor": GaussianArray.uniform((N, N)), "links": tf.zeros((N, N)) } self.factors = { "latent_prior": Prior(GaussianArray.from_shape((N, K), 0., 1.)), "heterogeneity_prior": Prior(GaussianArray.from_shape((N, 1), 0., 1.)), "product": Product((N, K), (N, N, K)), "concatenate": Concatenate({"a_u": (N, N, 1), "a_v": (N, N, 1), "s_uv": (N, N, K)}, (N, N, K+2)), "sum": Sum((N, N, K+2), (N, N)), "noise": AddVariance((N, N)), "adjacency": Probit((N, N)) } self._current_iter = 0 self._break_symmetry()
def __init__(self, child: GaussianArray, mean: float = 0., variance: float = 1., initial=None, name=""): super().__init__() self._deterministic = False self.mean = ParameterArray(mean, True, name=name+".mean") self.variance = ParameterArrayLogScale(variance, True, name=name+".variance") self._parameters = {"mean": self.mean, "variance": self.variance} self.child = child self.shape = child.shape() self.prior = GaussianArray.from_shape(self.shape, self.mean.value(), self.variance.value()) # initialize child self.message_to_child = GaussianArray.from_array(initial, tf.ones_like(initial) * variance * 0.1) self.child.set_to(self.message_to_child)