Ok…I think it is the self.hidden that is causing the problem…I am not sure why you are passing self.hidden in self.lstm, do you want the lstm layer to remember the state it was in the previous batch? If so you can do a detach and store in the model like
    x = self.embedding(x)
    x = F.relu(self.conv1(x))
    lstm_out , hidden = self.lstm(x, self.hidden)
    out = self.dropout(hidden[0][-1])
    self.hidden = (hidden[0].detach(), hidden[1].detach())
    out = F.relu(self.fc(out))
    return F.log_softmax(out, dim=1)

If you don’t need the lstm remember the state it was in previous batch (pretty common in sentiment analysis in which one sentiment text occurs in only one batch and does not continue in the next batch), I suggest you don’t pass anything to lstm.