Vatoz.Z:

prediction_out = self.dense_layer(lstm_out)
mse_input = prediction_out[:, 0, :]



With batch_first=True, the shape of lstm_out should be (batch_size, seq_len, num_directions * hidden_size). Since you use 1 layer, it should be (batch_size, seq_len, 200). This you push through a hidden layer, so prediction_out should be (batch_size, seq_len, 100).
That means that prediction_out[:, 0, :] takes the hidden state of the first time step for each sequence. You probably want to use the last time step, i.e., prediction_out[:, -1, :].
Since you throw all other hidden states, I’m not sure why you push all of the through the dense layer in the first place. I would simply do:
lstm_out, (h, c) = self.lstm(embedding_out)
prediction_out = self.dense_layer(h[-1])

With h[-1] being the last hidden state – last w.r.t. to the sequence as well as w.r.t. the last layer (in case you would have more than one). h[-1] should have the shape (batch_size, hidden_dim), like I assume you want.
There might be other issues with your code, but that stuck immediately out to me.