But when I have a model as such:
class Net(torch.nn.Module):

    def __init__(self):

        super().__init__()

        self.Linear_L1 = torch.nn.Linear(10, 5)

    def forward(self, InputData):

        Output = self.Linear_L1(InputData)

        return Output

Model = Net()

Calling Model.state_dict() by default sets the requires_grad flag to False. When I pass it to my training loop:
LossMetric = torch.nn.MSELoss()
Optimiser = torch.nn.Adam(Model.parameters(), lr = LearningRate)

Model.train()

for Epoch in range(NumberOfEpochs):

    for Iteration, Data in enumerate(TrainLoader):

        TrainX, TrainY = Data

        Optimiser.zero_grad()

        Output = Model(TrainX)

        Loss = LossMetric(Output, TrainY)

        Loss.backward()
        Optimiser.step() 

I am able to train the model and can observe the loss decreasing. Hence, would it be safe to assume that the instance of Optimiser is the one setting the requires_grad flag of all of the model’s parameters to True?