This operation self.lstm(x.view(1, bs, n)) looks dangerous, since it seems you would like to permute the dimensions and are using view for it.
If that’s the case, use x.permute() and pass the desired output dimensions to this operation.
I might be wrong and this code might only unsqueeze dim0, in which case you could use x.unsqueeze(0) to be more explicit.
I would generally recommend to try to overfit a small dataset, such as 10 samples, and make sure your model is able to do so. If your model cannot overfit this set, there might be other bugs in the code I’m missing at the moment.