Solved by vdw in post #5 
              
              
                AdaptiveLogSoftmaxWithLoss returns a loss, so you do not need another NLLoss. I never used that one, but I assume you need to change your forward() method to 
def forward(self, x, targets):
        # Set initial states
        h0 = torch.zeros(self.num_layers*2, x.size(0), self.hidden_size)
        …