nn.GRU expects the input in the shape [seq_len, batch_size, input_features] by default.
You could use batch_first=True to pass the inputs as [batch_size, seq_len, input_features], which seems to match your current input shape.
The output will have the shape [batch_size, seq_len, hidden*num_directions].
The following linear layers will apply their operations on dim1 “in a loop”, i.e. the linear transformation will be applied on each sample in the seq_len dimension.
The last x.squeeze(1) won’t have any effect, as the temporal dimension will stay at 60 in dim1.
Also, you don’t have any non-linearities between the linear layers, so you might want to add them.