1 课程学习
本节课主要对于大白AI课程:https://mp.weixin.qq.com/s/STbdSoI7xLeHrNyLlw9GOg
《Pytorch 模型推理及多任务通用范式》课程中的第二节课进行学习。
2 作业题目
(1)题目:
必做题:
( a) 从 torchvision 中加载 resnet18 模型结构,并载入预训练好的模型权重 'resnet18-
5c106cde.pth' (在物料包的 weights 文件夹中)。
( b) 将( 1)中加载好权重的 resnet18 模型,保存成 onnx 文件。
( c) 以 torch.rand([1,3,224,224]).type(torch.float32)作为输入,求 resnet18 的模型计算量和参数
量。
( d) 以 torch.rand([1,3,448,448]).type(torch.float32)作为输入,求 resnet18 的模型计算量和参数
量。
(2)实现结果
(a)
(b) onnx文件大小:45648KB
(c)Model: 1.82 GFLOPs and 11.69M parameters
(d)Model: 7.27 GFLOPs and 11.69M parameters
思考题:
(1) 比较必做题中的(3)和(4)的结果,有什么规律?
随着图片尺寸增加,模型计算量增加,不影响模型参数量.
(2) 尝试用 netron 可视化 resnet18 的 onnx 文件
(3) model 作为 torch.nn.Module 的子类,除了用 model.state_dict()查看网络层外,还可以用 model.named_parameters()和 model.parameters()。它们三儿有啥不同?
model.state_dict():返回的是所有参数和层名称等
model.named_parameters():可以这样用[(name, param.shape) for name, param in model.named_parameters()]。
model.parameters():可以这样用[ param.shape for param in model.parameters()]
后面两个都是返回的迭代器,然后named_parameters是参数和网络层名字都有,parameters只有参数.迭代器
(4) 加载模型权重时用的 model.load_state_dict(字典, strict=True),里面的 strict 参数什么情况下要赋值 False?
当网络结构不是完全一致的时候,通过false可以只设置相同网络层的权重。



