The state_dict contains the tensors (basically the data), not the nn.Parameters, which hold the requires_grad attribute.
Since you are recreating the model and load the state_dict, all flags are re-initialized.

model = models.resnet50()
print(model.fc.weight)
> Parameter containing:
tensor([[-0.0046, -0.0034, -0.0171,  ..., -0.0081,  0.0019, -0.0050],
        [-0.0167, -0.0093,  0.0100,  ...,  0.0180,  0.0164,  0.0170],
        [ 0.0093, -0.0114,  0.0144,  ...,  0.0003,  0.0202,  0.0163],
        ...,
        [-0.0188, -0.0040, -0.0019,  ...,  0.0113, -0.0164, -0.0054],
        [ 0.0212, -0.0127,  0.0155,  ..., -0.0200,  0.0092,  0.0188],
        [-0.0179,  0.0083, -0.0003,  ..., -0.0012, -0.0048, -0.0127]],
       requires_grad=True)
sd = model.state_dict()
print(sd['fc.weight'])
> tensor([[-0.0046, -0.0034, -0.0171,  ..., -0.0081,  0.0019, -0.0050],
        [-0.0167, -0.0093,  0.0100,  ...,  0.0180,  0.0164,  0.0170],
        [ 0.0093, -0.0114,  0.0144,  ...,  0.0003,  0.0202,  0.0163],
        ...,
        [-0.0188, -0.0040, -0.0019,  ...,  0.0113, -0.0164, -0.0054],
        [ 0.0212, -0.0127,  0.0155,  ..., -0.0200,  0.0092,  0.0188],
        [-0.0179,  0.0083, -0.0003,  ..., -0.0012, -0.0048, -0.0127]])