def calcLoss(self, t, categ_vec_h, categ_vec_c, mu, ln_var,wei_arr=None):
k = self.sample_size;
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)
t_vec = self.makeEmbedBatch(t)
for l in range(k):
z = F.gaussian(mu, ln_var)
if loss is None:
loss = self.decode(z, categ_vec_h, categ_vec_c, t_vec, t_pred,wei_arr) / (k * self.batch_size)
elif loss is not None:
loss += self.decode(z, categ_vec_h, categ_vec_c, t_vec, t_pred,wei_arr) / (k * self.batch_size)
C = 0.005 * (self.epoch_now - self.kl_zero_epoch) / self.epoch # 0.02
if self.epoch_now > self.kl_zero_epoch: loss+= C * F.gaussian_kl_divergence(mu, ln_var) / self.batch_size
return loss
评论列表
文章目录