pytorch加载内置模型、修改网络结构及加载预训练参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pytorch加载内置模型、修改网络结构及加载预训练参数相关的知识,希望对你有一定的参考价值。

参考技术A https://blog.csdn.net/qq_34108714/article/details/90169562
https://blog.csdn.net/qq_34108714/article/details/94750585

预训练模型的加载机理pytorch版

在做二维目标检测时,我们会对神经网络的部分地方进行修改,比如增加CBAM,或者修改FPN等等。但是将修改后的网络进行训练时,加载预训练权重过程却不会报错,甚至修改网络后性能不增反降。这里面蕴含的知识点在这篇文章做做一个总结。

pytorch中网络导入预训练权重的代码很简单:

net = model()
net.to(device)
net.load_state_dict(torch.load(\'params.pth\'))

其中:

  • torch.load(\'params.pth\')只是加载了模型参数,并没有将参数放入网络中这里是将参数以键值对的方式加载到了内存中。
  • load_state_dict方法才是将参数字典放入网络中。

当我们对网络做了修改后,我们只需要按下面的方式做,就可以将之前的预训练权重加载到新网络中。在mmdetection或者一些大牛的开源代码中,修改网络后仍然能加载预训练权重也是因为以下原因

以上是关于pytorch加载内置模型、修改网络结构及加载预训练参数的主要内容,如果未能解决你的问题,请参考以下文章

预训练模型的加载机理pytorch版

加载Pytorch中的预训练模型及部分结构的导入

加载Pytorch中的预训练模型及部分结构的导入

pytorch模型保存加载与续训练

pytorch如何给预训练模型添加新的层

[Pytorch]Pytorch 保存模型与加载模型(转)