Thanks for your reply.
class LSTMNet(nn.Module):
    def __init__(self):
        super(LSTMNet, self).__init__()
        self.lstm = nn.LSTM(n_steps, 64, 2)
        self.out = nn.Sequential(
            nn.Linear(64, 256),
            nn.Linear(256, 16),
            nn.Linear(16, 1)
        )

    def forward(self, x):
        x, _ = self.lstm(x)
        x = self.out(x).permute(0, 2, 1)
        return x

This is my LSTM architecture, and the n_steps is the temporal dimension.
This is the function low_level
    def low_level(self, x):
        x = self.lstmnet(x.permute(1, 0, 2, 3).reshape(3, n_steps, -1).permute(0, 2, 1))  # C2D + LSTM
        return x

For example, the shape of my inputs is (1, T, H, W), and I permute it to (T, 1, H, W), which lets T be the batch and variate be the channel, to do the Conv2D(padding=same) twice. Then torch.cat(dim=1) them to get the shape (T, 3, H, W) and run the model.low_level().Before LSTM, do some permute and reshape, (T, 3, H, W) → (3, T, H, W) → (3, T, H * W) → (3, H * W, T), and my class LSTM within FC makes the shape change to (3, 1(also represent T), H * W), which is my output.