神经网络-pytorch网络结构改变-拆分已定义的层

2022-09-26 13:46:54

这里整合了一些预备知识

有一个很不错的链接:https://blog.csdn.net/TTdreamloong/article/details/84823705

这里是引用
pytorch拆分已定义的网络结构
原文链接:https://www.jianshu.com/p/d2a066e05078

这里是引用
pytorch Module里的children()与modules()的区别
链接如下:https://blog.csdn.net/LXX516/article/details/79016980

以下是正文:

如果只是改变参数的话,就可以直接使用print(model)来输出网络的每个层的定义和名字。比如说第一层的名字是conv1,那么就直接使用

Cnn = model

Print(cnn) #获得每一层的定义和名字

Cnn.conv1 = liner……##这里直接重新对conv1重新定义即可。

如果整个结构都要变,那么就先找出原始模型的源代码,然后复制一份重命名,直接在原来的基础上修改结构,得到一个和pre-train的网络的结构有重复部分的自己的网络。

然后再把重复部分的参数直接拷贝过来就行了。

具体的方法:

用到的函数是model.state_dict()

这个函数的输出如下

在这里插入图片描述

在这里插入图片描述

返回值里包含信息:参数的层名.weight 以及.bias等等一层中的未知参数。

然后再使用pretrained_dict={k:v for k,v in pretrained_dict.items() if k in model_dict}

筛选出两个网络重叠的部分

最后用.updata()更新自己构造网络的字典参数(由.state_dict()函数输出)

最最后用cnn.load_state_dict(model_dict)来更新网络参数。

具体代码如下:

在这里插入图片描述

  • 作者:山遥兮
  • 原文链接:https://blog.csdn.net/sxf1999/article/details/109584832
    更新时间:2022-09-26 13:46:54