I think this can be the problem:
        self.gru_rating = tnn.GRU(input_size = 50, hidden_size = 100, num_layers = 5, bidirectional = True)
        self.gru_buscat = tnn.GRU(input_size = 50, hidden_size = 100, num_layers = 5, bidirectional = True)
        self.fc_rating = tnn.Linear(100, 1)
        self.fc_buscat = tnn.Linear(100, 5)

Since, these are bidirectional gru layers, the output dimension would would be 200, which doesn’t match with the Linear layer input dimension. Try:
        self.fc_rating = tnn.Linear(200, 1)
        self.fc_buscat = tnn.Linear(200, 5)