You only have 1 linear layer after the nn.LSTM layer. So that linear layer is your output layer, and there should be no further activation layers such as ReLU or Dropout layers. Try:
def forward(self, x, hidden):
    embeds = self.embedding(x)
    out, hidden = self.lstm(embeds, hidden)
    # fully connected
    out = self.linear(out[:, -1, :])
    # softmax
    out = self.softmax(out)
    return out, hidden

You also might want to call hidden = net.init_hidden() for each batch, not just for each epoch. While there are other means, be default the hidden state is initialized for each batch:
for epoch in range(epochs):
    temp_loss = []
    for inputs, labels in train_loader:
        hidden = net.init_hidden()
        ...

With this, you also shouldn’t need the line hidden = tuple([each.data for each in hidden]) anyway. This was probably your workaround to get it working anyway :).