pytorch导入预训练参数

导入预训练参数

在训练模型的过程中,常需要用到预训练的技巧,即导入在另一个数据集上训练好的参数作为模型参数的初始化,以加快现有模型训练的收敛速度。

1.导入pytorch库中的预训练模型

这些模型属于pytorch内置的模型——Alexnet、VGG、Resnet、DenseNet等,有一个参数pretrained用来控制是否导入预训练参数(这些预训练参数是在ImageNet数据集上训练得到的),代码示例:

// An highlighted block
import torchvision.models as models

model = models.alexnet(pretrained=True)
model = models.vgg19(pretrained=True)
model = models.resnet18(pretrained=True)
model = models.googlenet(pretrained=True)
model = models.densenet121(pretrained=True)
model = models.inception_v3(pretrained=True)

2.有参数文件xxx.pth的情况下,导入参数

其中’./xxx.pth’是文件路径

import torch
import torchvision.models as models

model = MyModle()
model.load_state_dict(torch.load('./xxx.pth'))

3.导入部分参数

这种情况下就是指,模型只需要导入部分预训练参数。比如说,我们的模型(Mymodel)有部分层和vgg19是一样的,然后只想导入这几层的预训练参数。在pytorch中每层模型的参数是以{key:value}的字典形式存储的。key指网络层的名称,value指层的参数。

// An highlighted block
import torchvision.models as models

//自己的模型的初始化并提取网络参数
mymodel = MyModel() 
mymodel_dict = mymodel.state_dict()

//得到vgg19的预训练参数
vgg19 = models.vgg19(pretrained=True)
vgg19_dict = vgg19.state_dict()

//保留vgg19参数中,key(层的名称)存在于mymodel的键值对
state_dict = {k: v for k, v in vgg19_dict.items() if k in mymodel_dict.keys()}

//更新mymodel的参数
mymodel_dict.update(state_dict)

//导入更新后的参数
mymodel.load_state_dict(mymodel_dict)

要注意的点就是,Mymodel中的网络层的名称必须要和vgg19对应层的名称一致,才能导入,不然就会引发keys miss等的错误。

打印一个模型结构的方法:

直接print()。

import torchvision.models as models

model = models.vgg19(pretrained=True)
print(model)

在这里插入图片描述

安装torchsummary的包,更为直观,根据输入图像的大小会输出每层的输出大小,以及参数量等。

import torchvision.models as models
from torchsummary import summary

vgg = models.vgg19().cuda()
summary(vgg, (3, 224, 224))

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值