def __call__(self, x, y=None): self.qw1 = nn.random.Gaussian(self.w1_m, nn.softplus(self.w1_s), p=nn.random.Gaussian(0, 1)) self.qb1 = nn.random.Gaussian(self.b1_m, nn.softplus(self.b1_s), p=nn.random.Gaussian(0, 1)) self.qw2 = nn.random.Gaussian(self.w2_m, nn.softplus(self.w2_s), p=nn.random.Gaussian(0, 1)) self.qb2 = nn.random.Gaussian(self.b2_m, nn.softplus(self.b2_s), p=nn.random.Gaussian(0, 1)) self.qw3 = nn.random.Gaussian(self.w3_m, nn.softplus(self.w3_s), p=nn.random.Gaussian(0, 1)) self.qb3 = nn.random.Gaussian(self.b3_m, nn.softplus(self.b3_s), p=nn.random.Gaussian(0, 1)) h = nn.tanh(x @ self.qw1.draw() + self.qb1.draw()) h = nn.tanh(h @ self.qw2.draw() + self.qb2.draw()) self.py = nn.random.Bernoulli(logit=h @ self.qw3.draw() + self.qb3.draw(), data=y) return self.py.mu.value
def forward(self, x): h = x for i in range(self.n_unit - 1): h = nn.tanh( np.matmul( h, self.parameter["w_encode{vari}".format(vari=i)] + self.parameter["b_encode{vari}".format(vari=i)])) for i in range(self.n_unit - 2, 0, -1): h = nn.tanh( np.matmul( h, self.parameter["w_decode{vari}".format(vari=i)] + self.parameter["b_decode{vari}".format(vari=i)])) x_ = np.matmul( h, self.parameter["w_decode0"] + self.parameter["b_decode0"]) self.px = nn.random.Gaussian(x_, 1., data=x)
def __call__(self, x, y=None): h = nn.tanh(x @ self.w1 + self.b1) coef = nn.softmax(h @ self.w2_c + self.b2_c) mean = h @ self.w2_m + self.b2_m std = nn.exp(h @ self.w2_s + self.b2_s) self.py = nn.random.GaussianMixture(coef, mean, std, data=y) return self.py
def transform(self, x): h = x for i in range(self.n_unit - 1): h = nn.tanh( np.matmul( h, self.parameter["w_encode{vari}".format(vari=i)] + self.parameter["b_encode{vari}".format(vari=i)])) return h.value
def __call__(self, x, y=None): self.pw1 = nn.random.Gaussian(0., 1., data=self.w1) self.pb1 = nn.random.Gaussian(0., 1., data=self.b1) self.pw2 = nn.random.Gaussian(0., 1., data=self.w2) self.pb2 = nn.random.Gaussian(0., 1., data=self.b2) h = nn.tanh(x @ self.w1 + self.b1) self.py = nn.random.Gaussian(h @ self.w2 + self.b2, std=0.1, data=y) return self.py.mu.value
def __call__(self, x, y=None): h = nn.tanh(x @ self.w1 + self.b1) self.py = nn.random.Bernoulli(logit=h @ self.w2 + self.b2, data=y) return self.py.mu.value
def __call__(self, x, y=None): h = nn.tanh(x @ self.w1 + self.b1) self.py = nn.random.Gaussian(h @ self.w2 + self.b2, std=1., data=y) # 这里最后一步不是用激活函数,而是用高斯分布,什么作用 return self.py.mu.value
def test_tanh(self): self.assertEqual(nn.tanh(0).value, 0)