torch常用指令——预训练模型篇

一:保存、读取模型参数指令

import torch
def model():
	...
net = model()
net.train()
torch.save(net, './model')
torch.save(net.state_dict(), './model_state_dict')
torch.save({'epoch': epochID + 1, 'state_dict': model.state_dict(), 'best_loss': lossMIN,
       'optimizer': optimizer.state_dict(),'alpha': loss.alpha, 'gamma': loss.gamma},
       './model_multi_params'
)

net2 = torch.load('./model')
net3 = model()
net3.load_state_dict(torch.load('./model_state_dict'))
#torch.load等一系列操作都是用来加载模型、模型参数等类似的文件

二:专业展示网络结构的方式

from torchsummary import summary

def model():
	pass
	
model = model()
summary(model,input_size=[(3, 224, 224)], batch_size=2, device="cpu")

注意device='cpu'不能不写,否则会报错。打印结果如下图:

在这里插入图片描述

三:.npy文件的读取

np.save生成的文件后缀都是.npy,若用来保存pytorch模型的输出特征,需要先从GPU切换到CPU,然后才能有效执行np.save,生成.npy文件。

下面将VIT比较少见的.npy格式模型参数加载,并选择性的放入模型中:

【setp1】看一看长啥样

在这里插入图片描述

打印出的结果:
在这里插入图片描述

【step2】看一看VIT源码中的加载方法

在这里插入图片描述在这里插入图片描述在这里插入图片描述
可见,基本思路就是先打印出预训练模型的参数,对照着想用的模块名称,用copy_覆盖掉当前模型的对应模块的参数,即可!(注意numpy和torch的格式转换

四:模型预训练参数的各种哦融合方法

  • 两个模型参数不一致,只想加载一致的且属于backbone的模型参数
pretrained_dict = torch.load(pretrained_model)
model_dict = model.state_dict()
pretrained_dict = {k: v for k, v in pretrained_dict.items() if (k in model_dict and 'Prediction' not in k)}
model_dict.update(pretrained_dict)  #更新
model.load_state_dict(model_dict)
  • 大模型加载到小模型、小模型加载到大模型、不一致的模型参数曲一致的互融
    model_A.load_state_dict(model_B_state_dict, strict = False)

详情可看:
1.讨论Pytorch中模型加载时参数不一致的情况
2.Pytorch加载预训练模型小结

五:torch.load()的参数细节

torch.load(f, map_location=None, pickle_module=pickle, **pickle_load_args)

对于cpu、不同gpu之间版本的转换而言,map_location参数决定了它。

使用方法如下:

model_path = "./cuda_model.pth"
model = torch.load(model_path)
print(next(model.parameters()).device)

结果为:

cuda:0
model_path = "./cuda_model.pth"
model = torch.load(model_path, map_location=torch.device('cpu'))
#或者 model = torch.load(model_path, map_location={'cuda:0':'cpu'})
#类似的也可以在不同gpu间转换 model = torch.load(model_path, map_location={'cuda:0':'cuda:1'})
print(next(model.parameters()).device)

结果为:

cpu
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
torch加载训练模型非常简单,只需几行代码即可完成。首先,我们需要导入相应的库和模型。 ```python import torch import torchvision.models as models ``` 接下来,选择一个训练模型,比如ResNet50。 ```python model = models.resnet50(pretrained=True) ``` 在这个例子中,我们加载了一个在ImageNet数据集上训练好的ResNet50模型。`pretrained`参数设置为`True`,表示我们要加载训练模型。请确保已经安装了torchvision库,它包含了许多常用训练模型。 接下来,可以通过打印模型的结构来查看模型的信息。 ```python print(model) ``` 可以看到模型的结构、参数信息等。 如果我们只需要使用模型进行推断而不需要微调,我们可以将模型设置为评估模式,以节省内存和加快计算速度。 ```python model.eval() ``` 现在我们已经成功加载了训练模型,可以将输入数据传递给模型进行推断了。 ```python output = model(input) ``` 这里的`input`是输入到模型的数据。输出结果`output`是一个张量,其中包含了模型对输入数据的测结果。 最后,根据模型的需求进行后处理,比如应用Softmax函数将结果转换为概率分布,或者进行其他操作。 以上就是使用torch加载训练模型的简单步骤。根据需要,我们可以在加载模型后进行微调,修改模型的最后几层,或者使用模型的特征提取层作为新问题的输入。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值