必做题:
(1) 从torchvision中加载resnet18模型结构,并载入预训练好的模型权重 ‘resnet18-5c106cde.pth’ (在物料包的weights文件夹中)。
import torch
import torchvision.models as models
model = models.resnet18()
pretrained_state_dict=torch.load('./weights/resnet18-5c106cde.pth')
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'
'''
import torchvision.models as models
model = models.resnet18()
pretrained_state_dict=torch.load('./weights/resnet18-5c106cde.pth')
model.load_state_dict(pretrained_state_dict, strict=True)
'''
(2) 将(1)中加载好权重的resnet18模型,保存成onnx文件。
'''
model.to(torch.device('cpu'))
model.eval()
inputs=torch.ones([1,3,224,224]).type(torch.float32).to(torch.device('cpu'))
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的模型计算量和参数量。
'''
import torchvision.models as models
model = models.resnet18()
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)文字叙述
|