PyTorch:如何加载预训练参数?

1.在没有改变原网络结构的情况下

model = resnet50()
model = model.load_state_dict(torch.load('model.pth'))

torch.load('model.pth')会把网络参数加载到一个有序字典当中, 然后把这个有序字典传递给model.load_state_dict()。

2.在只改变原网络结构的某一层或某几层的情况下

在不同的实际需求下,我们通常要对网络结构进行修改,比如ResNet50原来对1000个类别进行分类,而我们的任务只有10类的话,我们就要修改ResNet50的全连接层。而其它层不变,这时我们就可以通过加载预训练的网络参数来加速训练过程,提高准确率。

方法1:

# 将原始网络结构与修改后网络结构相同的键值对放到一个有序字典当中,不相同的键值对则被删除
pretrained_dict = {k: v for k, v in pretrained_dict.items() if k in model.state_dict()}
# 将这个有序字典传给load_state_dict
model.load_state_dict(pretrained_dict)

方法2:

model.load_state_dict(pretrained_dict, strict=False)

strict参数控制是否要求传入的有序字典是否与model的有序字典完全相同,若为False,则会加载相同的键的值,若为True,只要有一个不同的地方都会报错。

3. 在网络结构被魔改的情况下

首先说一下“魔改”的定义:网络结构得到了不同的封装,比如原网络结构是

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值