def __call__(self, var): dot_output = BF.dot(self.w, var, reduce=False) + self.b output = var + self.u*BF.sigmoid(dot_output) d_sigmoid = lambda x: BF.sigmoid(x)*(1. - BF.sigmoid(x)) psy = d_sigmoid(dot_output)*self.w log_det = -BF.log(BF.abs(1. + BF.dot(self.u, psy)) + self.shift) return DeterministicVariable(output, log_determinant=log_det, name="PlanarFlow {}".format(var.name))
def __init__(self, scale, jitter=0.): self.scale = var2link(scale) covariance = lambda x, y: BF.exp(-BF.abs(x - y) / (scale)) + BF.delta(x, y) * jitter super().__init__(covariance=covariance)
def __call__(self, var): output = BF.matmul(self.tri_matrix, var) log_det = -BF.sum(BF.log(BF.abs(self.tri_matrix[:, self.diag_indices[0], self.diag_indices[1]]) + self.shift), axis=1) return DeterministicVariable(output, log_determinant=log_det, name="L {}".format(var.name))
def __call__(self, var): return DeterministicVariable(self.s*var, log_determinant=-BF.log(BF.abs(DeterministicVariable(self.s, learnable=self.learnable, name="{}_scale".format(var.name)))), name="{}*{}".format(self.s, var.name))