I’ve checked the weights before and after calling Model.load_state_dict() on the instance of the main model and the weights were loaded correctly.
I then used:
Model.Conv1D_L1.requires_grad = False

Model.BatchNorm1D_L3.requires_grad = False

LossMetric = torch.nn.CrossEntropyLoss()

Optimiser = torch.optim.Adam(Model.parameters())

After that, I fed the instance of the main model to the training loop as defined below:
def TrainModel(TrainLoader, Model, NumberOfEpochs, Optimiser, LossMetric):

    if(torch.cuda.is_available()):

        Model.to("cuda:0")
        UseGPU = True

    else:

        UseGPU = False

    TrainingLoss = []

    for Epoch in range(NumberOfEpochs):

        TrainingRunningLoss = 0

        Model.train()

        for Iteration, Data in enumerate(TrainLoader):

            TrainX, TrainY = Data

            if(UseGPU == True):

                TrainX = TrainX.to("cuda:0")
                TrainY = TrainY.to("cuda:0")

            Optimiser.zero_grad()

            Output = Model(TrainX)

            Loss = LossMetric(Output, TrainY)

            TrainingRunningLoss += Loss.item()

            Loss.backward()
            Optimiser.step()

        TrainingLoss.append(TrainingRunningLoss)

   return Model, TrainingLoss