self.p = nn.Softmax(dim=1)(torch.mm(self.q.t(), self.H)) # (1*m) self.u = torch.mul(self.p, self.H).sum(dim=1).unsqueeze(1) # (64*1) # self.unit_params('R', dim=1) self.ans_vector = torch.mm( self.params['R'], nn.Sigmoid()(self.q + torch.mm(self.params['K'], self.u))) # (k,1) self.ans = nn.LogSoftmax(dim=1)(self.ans_vector.t()) return self.ans #--------------------------------------------------------------------------------------------------# #--------------------------------------------------------------------------------------------------# #--------------------------------------------------------------------------------------------------# model = Test_entNet_Model() CG = graph.Computation_Graph() fake_sentence = nn.init.normal_(torch.empty(input_size, dtype=torch.float, device='cuda'), mean=0.0, std=0.1) fake_question = nn.init.normal_(torch.empty(input_size, dtype=torch.float, device='cuda'), mean=0.0, std=0.1) model(fake_sentence) # ans = model(fake_sentence, fake_question) ans = model.answer(fake_question) CG.recursive_loop(ans.grad_fn)
self.p = nn.Softmax(dim=1)(torch.mm(self.q.t(), self.H)) # (1*m) self.u = torch.mul(self.p, self.H).sum(dim=1).unsqueeze(1) # (64*1) # self.unit_params('R', dim=1) self.ans_vector = torch.mm( self.params['R'], nn.Sigmoid()(self.q + torch.mm(self.params['K'], self.u))) # (k,1) self.ans = nn.LogSoftmax(dim=1)(self.ans_vector.t()) return self.ans #--------------------------------------------------------------------------------------------------# #--------------------------------------------------------------------------------------------------# #--------------------------------------------------------------------------------------------------# model = Test_entNet_Model() CG = graph.Computation_Graph(identity_size, plot_graph=True) fake_sentences = [ nn.init.normal_(torch.empty(identity_size['E'], dtype=torch.float, requires_grad=True, device='cuda'), mean=0.0, std=0.1).view(input_size) for _ in range(6) ] fake_question = nn.init.normal_(torch.empty(identity_size['Q'], dtype=torch.float, requires_grad=True, device='cuda'), mean=0.0, std=0.1).view(input_size)