Pytorch什么时候初始化参数?

When does Pytorch initialize parameters?

我现在正在用 Pytorch 编写自己的网络。我想在我的网络中使用预训练模型。这是我覆盖的 init() 代码:

class Generator(nn.Module):
    def __init__(self) -> None:
        super(Generator, self).__init__()
        model_path = "somedir"
        chekpoint = torch.load(model_path)
        h_model = H_model()
        h_model.load_state_dict(chekpoint['model'])
        # 设置为测试模式
        h_model.eval()
        self.H_model = h_model
        self.unet = UNet(enc_chs=(9,64,128,256,512), dec_chs=(512, 256, 128, 64), num_class=3, retain_dim=False, out_sz=(304, 304))

在这里,h_model 是从我训练好的检查点加载的。 我的问题是,初始化后,h_model中的参数是否会改变(预训练参数vaule是否被某个函数修改?)?以及为什么(我的意思是Pytorch在初始化参数时如何处理自定义层?Pytorch何时初始化参数?)

对于基本层(例如,nn.Convnn.Linear等),参数由层的__init__方法初始化。
例如,查看 class _ConvNd(Module) 的源代码(所有其他卷积层都源自 class)。在其 __init__ 的底部,它调用 self.reset_parameters() 来初始化权重。

因此,如果你的nn.Module没有任何“独立”nn.Parameters,只有子nn.Modules内的可训练参数,当你构建你的网络时,所有权重子模块在构造子模块时被初始化。 也就是说,一旦您调用 h_model = H_model()h_model 的权重就已经初始化为其默认值。调用 h_model.load_state_dict(...) 会将这些值覆盖为所需的 pre-trained 权重。