def calcLoss(self,t,mu,ln_var):
k = self.sample_size;kl_zero_epoch = self.kl_zero_epoch
loss = None
t_pred = [t_e[1:]+[2] for t_e in t]
t_pred = [xp.asarray(tp_e,dtype=xp.int32) for tp_e in t_pred]
t = self.denoiseInput(t)
print("t:{}".format([self.vocab.itos(t_e) for t_e in t[0]]))
t_vec = self.makeEmbedBatch(t)
for l in range(k):
z = F.gaussian(mu, ln_var)
if loss is None:loss = self.decode(z,t_vec,t_pred) / (k * self.batch_size)
elif loss is not None:loss += self.decode(z,t_vec,t_pred) / (k * self.batch_size)
C = 0.06 *(self.epoch_now-kl_zero_epoch)/self.epoch
if self.epoch_now>kl_zero_epoch:loss += C * F.gaussian_kl_divergence(mu, ln_var) / self.batch_size
return loss
评论列表
文章目录