七、预测输出值
7.1 接口方法
方法一:prediction(from:)
7.1.1 作用
根据给定的输入要素值预测输出要素值。
7.1.2 声明
func prediction(from input: MLFeatureProvider) throws -> MLFeatureProvider
7.1.3 参数
input
: 模型预测所需要的所有要素值。
7.1.4 返回值
一个表示模型预测的要素提供程序。
MLFeatureProvider
: 表示模型输入或输出值集合的接口。
方法二:prediction(from:options:)
7.2.1 作用
根据给定的输入要素值预测输出要素值。
7.2.2 声明
func prediction(from input: MLFeatureProvider, options: MLPredictionOptions) throws -> MLFeatureProvider
7.2.3 参数
input
: 模型预测所需要的所有要素值。
option
: 用于预测的所有选项。
7.2.4 返回值
一个表示模型预测的要素提供程序。
方法三:predictions(from:options:)
7.3.1 作用
根据给定的一批输入要素值预测输出要素值。
7.3.2 声明
func predictions(from inputBatch: MLBatchProvider, options: MLPredictionOptions) throws -> MLBatchProvider
7.3.3 参数
inputBatch
: 模型进行预测所需要的一批要素值。
options
: 用于预测的所有选项。
7.3.4 返回值
一个批处理提供程序,表示模型对该批输入的预测。
MLBatchProvider
: 表示要素提供程序集合的接口。
7.4 MLFeatureProvider
表示模型输入或输出值集合的接口。
7.4.1 声明
protocol MLFeatureProvider
7.4.2 概述
在模型动态生成的接口不能够满足您的应用的需求时,可以使用MLFeatureProvider自定义方法来从您的模型获取数据。
如果符合下列任何条件,请考虑在数据源上采用该协议。
- 您的数据是异步收集的。
- 使用自动生成的接口会导致拷贝过多数据。
- 您的数据非常复杂。
该接口主要是MLFeatureValue实例的访问器,因此易于实现。采用这个协议可以直接将数据和MLModel集成在一起,这意味着模型可以查询数据源而不必构建单独的输入实例。
自定义应用程序和模型的交互:
- 在类或者结构体中采用
MLFeatureProvider
协议,以便模型能够查询通过featureValue(for:)
输入要素值。 - 使用
prediction(form:)
或者prediction(form:options:)
将应用程序的MLFeatureProvider传递给您的MlModel。 - 使用从
prediction(from:)
方法返回的MLFeatureProvider
来获取该预测的输出要素值。
7.4.3 featureValue(for:)
根据给定的要素名称访问要素值。
7.4.3.1 声明
func featureValue(for featureName: String) -> MLFeatureValue?
7.4.3.2 参数
featureName
: 所需要素值的名称。
7.4.3.3 返回值
MLFeatureValue?
: 要素值,如果该要素名称没有值则为nil
。
7.4.4 featureNames
一组有效的特征名称。
var featureNames: Set<String> { get }
7.5 MLBatchProvider
表示特征提供程序集合的接口。
7.5.1 声明
protocol MLBatchProvider
7.5.2 概述
和MLFeatureProvider相同,这个接口允许您定义您自己的批量处理供应程序。如果您的数据是异步收集或者是内存密集型,在您的数据结构上实现这个协议,从而使用批量处理来优化性能。
7.5.3 方法
7.5.3.1 features(at:)
返回给定下标的特征值。
func features(at index: Int) -> MLFeatureProvider
index
: 所需 feature provider 的下标。
return value
: 给定下标的feature provider。
7.5.3.2 var count: Int
这批feature provider的数目。
var count: Int { get }
7.6 MLPredictionOptions
作出预测时可用的选项。
Language | SDKs | Framework |
---|---|---|
Swift Objective-C |
iOS 11.0+ macOS 10.13+ tvOS 11.0+ watchOS 4.0+ |
Core ML |
class MLPredictionOptions : NSObject
7.6.1 usesCPUOnly
一个Boolean类型的值,指的是是否仅用CPU计算预测。
var usesCPUOnly: Bool { get set }
如果您的模型可能运行在后台或者如果您的app有其他的GPU密集型任务,那么该模型需要被限制仅使用CPU。
八、检测模型
8.1 configuration
初始化过程中设置的模型的配置。
var configuration: MLModelConfiguration { get }
8.2 modelDescription
有关此模型的信息(打算在开发期间使用),也显示在模型的Xcode视图中。
var modelDescription: MLModelDescription { get }
8.3 MLModelDescription
关于模型的信息,主要是每个特性的预期输入和输出格式,以及可选的元数据。
class MLModelDescription : NSObject
8.3.1 访问特性描述
8.3.1.1 inputDescriptionsByName
此模型的各种输入特性的描述,以每个特性的名称作为key。
var inputDescriptionsByName: [String : MLFeatureDescription] { get }
8.3.1.2 outputDescriptionsByName
此模型的各种输出特性的描述,以每个特性的名称作为key。
var outputDescriptionsByName: [String : MLFeatureDescription] { get }
8.3.1.3 MLFeatureDescription
输入、输出特性的名称、类型和约束。
class MLFeatureDescription : NSObject
在Core ML中,一个feature是一个单独的输入或者输出模型。一个模型可以拥有任意数量的输入feature或输出feature。每一个feature有一个名称和一个数值类型,被定义在feature的MLFeatureDescription中。模型的创造者使用feature descriptions来帮助开发者正确的集成他们的模型。每一个MLFeatureDescription实例都拥有只读属性,这些属性表示feature的名称,类型以及是否可选。
关于features的例子,参阅Integrating a Core ML Model into Your App。请注意名为solarPanels,greenhouses和size的三个输入features,而输出feature的名称为price。四个feature的类型都是Double类型。
MLFeatureDescription也可能包含约束,这些约束指定了模型的输入输出特性的限制。对于每一个输入feature,约束描述了那些值是模型需要从您的应用程序中获得的。对于每一个输出feature,约束描述了那些值是您的应用程序希望从模型中获得的。您还可以在应用程序中使用模型之前编写代码来检查这些描述。
8.3.1.3.1 检查Feature
(1)name :这个feature的名称。
var name: String { get }
(2)type :这个feature的类型
var type: MLFeatureType { get }
(3)MLFeatureType :feature值,输入feature和输出feature的可能类型。
MLFeatureType {
MLFeatureType.int64
MLFeatureType.double
MLFeatureType.image
MLFeatureType.multiArray
MLFeatureType.string
MLFeatureType.dictionary
MLFeatureType.sequence
MLFeatureType.invalid
}
(4)isOptional :表示feature是否是可选的一个Boolean值。
var isOptional: Bool { get }
8.3.1.3.2 检查有效性
isAllowedValue(_:)
:检查模型是否接受输入的feature值。
func isAllowedValue(_ value: MLFeatureValue) -> Bool
参数:
value
:给定MLFeatureValue,它是否与这个MLFeatureDescription的MLFeatureType兼容。
返回值:
return value
:如果给定的MLFeatureValue可被模型的输入特性接受,则为True,否则为false。
8.3.1.3.3 访问Feature约束
(1)imageConstraint :图像特征的大小和格式约束。
var imageConstraint: MLImageConstraint? { get }
(2)MLImageConstraint
图像特征的宽度、高度和像素格式约束。
class MLImageConstraint : NSObject
(3)var dictionaryConstraint: MLDictionaryConstraint?
字典特性的约束。
(4)class MLDictionaryConstraint
字典特性键上的约束。
(5)var multiArrayConstraint: MLMultiArrayConstraint?
多维数组特性的约束。
(6)class MLMultiArrayConstraint
多维数组特性的形状和数据类型约束。
(7)var sequenceConstraint: MLSequenceConstraint?
序列特性的约束。
(8)class MLSequenceConstraint
序列特性的约束。
8.3.2 访问元数据
8.3.2.1 metadata
var metadata: [MLModelMetadataKey : Any] { get }
元数据对象有与模型有相关的信息,由MLModelMetadataKey
中的keys定义。
8.3.2.2 MLModelMetadataKey
模型使用的元数据字典的Keys。
struct MLModelMetadataKey
Metadata Keys
:
static let author: MLModelMetadataKey
Key for the author of the model.
static let description: MLModelMetadataKey
Key for the overall description of the model.
static let license: MLModelMetadataKey
Key for the license of the model.
static let versionString: MLModelMetadataKey
Key for the version of the model.
static let creatorDefinedKey: MLModelMetadataKey
Key for the model creator’s custom metadata.
Creating Metadata
:
init(rawValue: String)
8.3.3 访问预测名称
8.3.3.1 predictedFeatureName
要预测值的名称。
var predictedFeatureName: String? { get }
8.3.3.2 predictedProbabilitiesName
预测概率的名称。
var predictedProbabilitiesName: String? { get }
网友评论