Last edited time
Oct 4, 2024 07:58 AM
type
status
date
slug
summary
tags
category
icon
password
Apple官方视频讲解
其中有些代码已经有点过时了,其中的模型的类型和type等代码实际都不对,请根据下文的代码来。
范例
图片model转化为coreml模型
代码来源:
语言model转化为coreml模型
代码来源:
注意点
返回结果只能是tensors或者tuples of tensors
假设上述
self.model
返回的是一个带有 out
key的 dict
,那么直接 torch.jit.trace
会报错,需要给他像上面这样子包裹一层 WrapperModel
,让其最终 forward
还是返回一个 tensor
对象才可以。操作函数必须是python原生或者pytorch原生
如果要转为
torchscript
,那么必须确保所有函数都是python的基础函数,不能使用类似于math之类的仓库,这类仓库的操作 torch.jit.trace
或者 torch.jit.script
无法识别,会弹出警告并且实际会忽视这些操作。评估模式的选择
如上所示,在
torch.jit.trace
之前,多数人想要确保模型处于评估模式,这确保所有层级都配置为推断,而不是训练,对于大多数层级,这并不重要。但例如,如果你的模型中有一个dropout层或者BatchNorm层,设置评估模式将确保它被禁用,而当转换器遇到被禁用的操作时,将会忽视它们,把它们视为传递操作。(这样是合理的,不需要改为train模式,因为本身在预测的时候就需要参数固定)类型注释
像上述代码中的话,默认
torch.jit.script
函数会把所有的类型当作 Tensor
,也就是说 _list
被视作List[torch.Tensor]
,但是 range(10)
生成的是 int
类型,int
不符合 Tensor
,自然也就报错了。要修复的话需要改成如下- 作者:七月
- 链接:https://huaqinda.com/article/ce474de6-19c9-461f-b6a5-3767d52176f7
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。