一、作用
MLModel 是机器学习模型的所有细节的封装。
二、声明
class MLModel : NSObject
三、概述
MLModel封装了一个模型的预测方法,配置和模型描述。
大多数情况下,你可以在不访问该MLModel class的情况下,直接使用Core ML。相反,在向Xcode加一个模型时,你可以使用Xcode自动生成对程序员友好的包装类(参阅添加模型到项目)。如果你的应用程序需要包装类之外的MLModel接口,可以使用包装类的model属性。
使用MLModel接口:
- 使用你的应用程序自定义的MLFeatureProvider来调用 prediction(from:)和prediction(from:options)方法。
- 使用你的应用程序自定义的MLBatchProvider来调用prediction(from:opetions:)方法。
- 通过modelDescription检查你的模型的metadata和MlFeatureDescription实力。
如果你的应用程序要在用户的设备上下载和编译一个模型,MLModel interface是你使用该模型的唯一方法。参阅在用户设备上下载和编译模型。
四、创建模型
4.1 初始化方法一
通过编译模型文件,创建一个Core ML模型。
4.1.1 声明
convenience init(contentsOf url: URL) throws
4.1.2 参数
contentsOf
:
指向一个可编译模型文件(modelName.mlmodelc)的地址,通常是compileModel(at:)返回的URL。
4.1.3 讨论
大多数情况下,你的应用程序不必马上创建一个模型对象。首先考虑使用Xcode自动生成的包装类,如添加模型到项目中描述的那样。
然而,如果包装类不能够满足你的需求,那么使用这个初始化器从应用程序可以访问的任何可编译模型文件来创建一个模型对象。通常,在你下载和编译一个模型后,您就可以使用这个初始化器,这是一种节省应用程序空间的技术。参阅在用户设备上下载和编译模型。
4.2 初始化方法二
通过编译模型文件和自定义设置,创建一个Core ML模型。
4.2.1 声明
convenience init(contentsOf url: URL, configuration: MLModelConfiguration) throws
4.2.2 参数
contentsOf
:
指向一个可编译模型文件(modelName.mlmodelc)的地址,通常是compileModel(at:)返回的URL。
configuration
:
新模型对象的模型设置。
4.2.3 讨论
同上,区别在于“如果包装类不能够满足你的需求”改为了“如果包装类不能够满足你的需求或者您需要定制模型设置
”。
五、MLModelConfiguration
模型对象的设置。
声明:
class MLModelConfiguration : NSObject
5.1 允许访问的处理单元
5.1.1 实例属性
computeUnits
:模型用来进行预测的处理单元。
var computeUnits: MLComputeUnits { get set }
5.1.2 枚举值
MLComputeUnits
:模型用于进行预测的一组处理单元配置。
enum MLComputeUnits : Int
概述:
当进行预测是的时候,使用此枚举来设置或检查被允许使用的处理单元。
使用all允许操作系统选择要使用的最佳处理单元(包括神经引擎,如果有的话)。
使用cpuOnly来约束模型到CPU,如果它可能运行在后台或运行其他GPU密集型任务。
枚举值:
case cpuOnly = 0
case cpuAndGPU = 1
case all = 2
MLComputeUnits.cpuOnly
:模型仅被允许使用CPU。
MLComputeUnits.cpuAndGPU
:模型被允许使用CPU和GPU,但是不包括神经引擎。
MLComputeUnits.all
:模型被允许使用所有可用的计算单元,包括神经引擎。
六、编译模型
6.1 方法
compileModel(at:)
: 在设备上编译模型来更新应用程序中的模型。
6.2 声明
class func compileModel(at modelURL: URL) throws -> URL
6.3 参数
at
: 下载.mlmodel文件的本地文件路径。
6.4 返回值
已编译模型(.mlmodelc 文件)的本地文件路径。
6.5 讨论
.mlmodel源文件必须在设备商。传递已编译模型到inint(contentsOf:)来初始化一个MLModel实例。
___编译一个模型文件,并通过这个编译版本创建一个MLModel实例:
let compiledUrl = try MLModel.compileModel(at: modelUrl)
let model = try MLModel(contentsOf: compiledUrl)
编译可能比较耗时,不应再主线程中完成。
参阅在用户设备上下载和编译模型。