There are a few issues in your code:

the states should have the shape [num_layers * num_directions, batch_size, hidden_size], while your self.hidden tuple contains the seq_len.
if you want to permute the dimensions in sequences using sequences.view(len(sequences), seq_len, -1), note that you would interleave the data, so use sequences.permute instead.
the same applies for lstm_out.view. Swapping dimensions should be done with permute. Since you are using batch_first=True, you can instead index the output via lstm_out[:, -1, :] without any permutation.

self.linear is undefined and should be replaced with self.fc.

The docs 1 provide also additional information about the expected shapes.