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

pytorch如何给预训练模型添加新的层,第1张

在使用pytorch预训练模型的时候发现预训练模型的输出层没有激活函数,为了提高模型的训练效果需要自己添加。以ResNet50为例:

输出的模型为:

可以看到最后的输出层是没有激活函数的,因此我们需要队fc层进行修改:

网络模型的fc层就变成了

pytorch保存模型非常简单,主要有两种方法:

一般地,采用一条语句即可保存参数

其中model指定义的模型 实例变量 ,如 model=vgg16( ), path是保存参数的路径,如 path='./model.pth' , path='./model.tar', path='./model.pkl', 保存参数的文件一定要有后缀扩展名。

特别地,如果还想保存某一次训练采用的优化器、epochs等信息,可将这些信息组合起来构成一个字典,然后将字典保存起来:

针对上述第一种情况,也只需要一句即可加载模型:

针对上述第二种以字典形式保存的方法,加载方式如下:

需要注意的是,只保存参数的方法在加载的时候要事先定义好跟原模型一致的模型,并在该模型的实例对象(假设名为model)上进行加载,即在使用上述加载语句前已经有定义了一个和原模型一样的Net, 并且进行了实例化 model=Net( ) 。

另外,如果每一个epoch或每n个epoch都要保存一次参数,可设置不同的path,如 path='./model' + str(epoch) +'.pth',这样,不同epoch的参数就能保存在不同的文件中,选择保存识别率最大的模型参数也一样,只需在保存模型语句前加个if判断语句即可。

下面给出一个具体的例子程序,该程序只保存最新的参数:

在训练模型的时候可能会因为一些问题导致程序中断,或者常常需要观察训练情况的变化来更改学习率等参数,这时候就需要加载中断前保存的模型,并在此基础上继续训练,这时候只需要对上例中的 main() 函数做相应的修改即可,修改后的 main() 函数如下:

以上方法,如果想在命令行进行 *** 作执行,都只需加入argpase模块参数即可,相关方法可参考我的 博客

用法可参照上例。

这篇博客是一个快速上手指南,想深入了解PyTorch保存和加载模型中的相关函数和方法,请移步我的这篇博客: PyTorch模型保存深入理解

1、更新pip:(还有一个重要前提就是要在activate pytorch里面做改动)

python -m pip install --upgrade pip

或者:pip install --user --upgrade pip

python -m pip install -U pip

2、先卸载numpy(pip uninstall numpy)再安装固定版本的numpy(pip install numpy)

3、关于matplotlib找不到指定模块,那就是把原本matplotlib的版本降低了[71] 

4、关于sklearn和scipy找不到指定模块[72] ,那就是把原本的sklearn和scipy卸载再安装指定版本


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11610977.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存