コード例 #1
0
 def eval_perplexity(self):
     """
     Knowledge evaluation on dataset, perplexity
     :param dataset:
     :return:
     """
     print("Knowledge evaluating ...")
     dataset = self.dataset
     self.forward_init(1)
     perpls = []
     knw_size = len(self.knw_list)
     hidden = torch.zeros(1, 1, knw_size)
     datab = []
     for data in dataset:
         datavec = np.zeros(self.lsize)
         datavec[data] = 1
         datab.append(datavec)
     datab = np.array(datab)
     databpt = torch.from_numpy(datab)
     databpt = databpt.type(torch.FloatTensor)
     for nn in range(len(databpt) - 1):
         x = databpt[nn]
         y = databpt[nn + 1]
         prd, hidden = self.forward(x.view(1, 1, self.lsize),
                                    hidden,
                                    plogits=self.plogits)
         prd = torch.exp(prd) / torch.sum(np.exp(prd))
         perp = cal_kldiv(y, prd.view(-1))
         perpls.append(perp)
     avperp = np.mean(np.array(perpls))
     print("Calculated knowledge perplexity:", np.exp(avperp))
     return np.exp(avperp)
コード例 #2
0
 def cal_knwU(self):
     tmp = self.prior.copy()
     tmp[self.data[-1]] = 0
     KnwU = cal_kldiv(
         tmp, self.prior) * (self.prior[self.data[0]] / np.sum(self.prior))
     return KnwU