ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

PyTorch学习Lesson2

2021-10-14 21:32:28  阅读:194  来源: 互联网

标签:resnet18 Lesson2 models 模型 torch 学习 PyTorch dict model


必做题:

(1) 从torchvision中加载resnet18模型结构,并载入预训练好的模型权重 ‘resnet18-5c106cde.pth’ (在物料包的weights文件夹中)。

import torch

#从torchvision库中加载模型结构
import torchvision.models as models
model = models.resnet18()
#读取预训练好的模型权重
pretrained_state_dict=torch.load('./weights/resnet18-5c106cde.pth')
#将读取的权重载入model
model.load_state_dict(pretrained_state_dict, strict=True)

(2) 将(1)中加载好权重的resnet18模型,保存成onnx文件。

resnet18.onnx文件大小为45648KB

在这里插入图片描述

(3) 以torch.rand([1,3,224,224]).type(torch.float32)作为输入,求resnet18的模型计算量和参数量。

Model: 1.82 GFLOPs and 11.69M parameters

(4) 以torch.rand([1,3,448,448]).type(torch.float32)作为输入,求resnet18的模型计算量和参数量。

Model: 7.27 GFLOPs and 11.69M parameters

完成源码如下

import torch
'''
(1)    从torchvision中加载resnet18模型结构,并载入预训练好的模型权重 'resnet18-5c106cde.pth'
'''
#从torchvision库中加载模型结构
import torchvision.models as models
model = models.resnet18()
#读取预训练好的模型权重
pretrained_state_dict=torch.load('./weights/resnet18-5c106cde.pth')
#将读取的权重载入model
model.load_state_dict(pretrained_state_dict, strict=True)

'''
(2)    将(1)中加载好权重的resnet18模型,保存成onnx文件。
'''
#模型放置CPU
model.to(torch.device('cpu'))
#模型变为推理状态
model.eval()
#构建一个项目推理时需要的输入大小的单精度Tensor,并且放置模型所在的设备(CPU或CUDA)
inputs=torch.ones([1,3,224,224]).type(torch.float32).to(torch.device('cpu'))
#生成onnx
torch.onnx.export(model, inputs, './weights/resnet18.onnx',  verbose=False)

'''
(3)    以torch.rand([1,3,224,224]).type(torch.float32)作为输入,求resnet18的模型计算量和参数量。
(4)    以torch.rand([1,3,448,448]).type(torch.float32)作为输入,求resnet18的模型计算量和参数量。
'''
#从torchvision库中加载模型结构
import torchvision.models as models
model = models.resnet18()
#构建一个适合模型输入大小的单精度Tensor
inputs=torch.ones([1,3,224,224]).type(torch.float32)
inputs2=torch.ones([1,3,448,448]).type(torch.float32)
#统计计算量和参数量
from thop import profile
flops, params = profile(model=model, inputs=(inputs,))
flops2, params2 = profile(model=model, inputs=(inputs2,))
print('Model: {:.2f} GFLOPs and {:.2f}M parameters'.format(flops/1e9, params/1e6))
print('Model2: {:.2f} GFLOPs and {:.2f}M parameters'.format(flops2/1e9, params2/1e6))

思考题:

(1) 比较必做题中的(3)和(4)的结果,有什么规律?
(2) 尝试用netron可视化resnet18的onnx文件
(3) model作为torch.nn.Module的子类,除了用 model.state_dict()查看网络层外,还可以用model.named_parameters()和model.parameters()。它们三儿有啥不同?
(4) 加载模型权重时用的model.load_state_dict(字典, strict=True),里面的strict参数什么情况下要赋值False?

答题格式如下:

必做题:
题(1)提交代码或者代码图片
题(2)提交onnx文件的大小,即多少MB?
题(3)提交计算量和参数量
题(4)提交计算量和参数量
思考题:
题(1)规律用文字叙述
题(2)把里面某一个残差结构(residual block)截个图
题(3)不同点用文字叙述
题(4)文字叙述

标签:resnet18,Lesson2,models,模型,torch,学习,PyTorch,dict,model
来源: https://blog.csdn.net/weixin_44942126/article/details/120772454

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有