swift coreML:没有 "options" 参数的预测函数
swift coreML: prediction function without "options" parameter
在swiftdocumentation中,MLModel有两个预测函数
- func 预测(来自:MLFeatureProvider)-> MLFeatureProvider。根据给定的输入特征值预测输出特征值。
- func 预测(来自:MLFeatureProvider,选项:MLPredictionOptions)-> MLFeatureProvider。根据给定的输入特征值预测输出特征值。
但是,在我自动生成的 MLModel class 中,没有生成带有选项参数的函数。以下代码是我自动生成的预测函数。
func prediction(input: coreML_1denses_80iters_k213_2Input) throws -> coreML_1denses_80iters_k213_2Output {
let outFeatures = try model.prediction(from: input)
let result = coreML_1denses_80iters_k213_2Output(output1: outFeatures.featureValue(for: "output1")!.multiArrayValue!, lstm_1_h_out: outFeatures.featureValue(for: "lstm_1_h_out")!.multiArrayValue!, lstm_1_c_out: outFeatures.featureValue(for: "lstm_1_c_out")!.multiArrayValue!)
return result
}
func prediction(input1: MLMultiArray, input2: MLMultiArray, lstm_1_h_in: MLMultiArray?, lstm_1_c_in: MLMultiArray?) throws -> coreML_1denses_80iters_k213_2Output {
let input_ = coreML_1denses_80iters_k213_2Input(input1: input1, input2: input2, lstm_1_h_in: lstm_1_h_in, lstm_1_c_in: lstm_1_c_in)
return try self.prediction(input: input_)
}
注意:
顺便说一句,我想找到带有 "options" 参数的预测函数的原因是这个错误消息:
[coreml] Cannot evaluate a sequence of length 600, which is longer than maximum of 400.
而且我找到了一个名为 "usesCPUOnly" 的 solution, which is adding a forceCPU Flag in prediction function. The option can be found in MLPredictionOptions。但是,我找不到放置选项的地方。
一种方法是在自动生成的 class(在不同的源文件中)的 extension
中添加您自己的预测方法。
感谢@Matthijs Hollemans。我找到了解决方案。只需编写我自己的扩展并像这样覆盖预测功能。
func prediction(input: model_1denses_50iters_k213Input) throws -> model_1denses_50iters_k213Output {
let options = MLPredictionOptions()
options.usesCPUOnly = true
let outFeatures = try model.prediction(from: input, options:options)
let result = model_1denses_50iters_k213Output(output1: outFeatures.featureValue(for: "output1")!.multiArrayValue!, lstm_85_h_out: outFeatures.featureValue(for: "lstm_85_h_out")!.multiArrayValue!, lstm_85_c_out: outFeatures.featureValue(for: "lstm_85_c_out")!.multiArrayValue!)
return result
}
在swiftdocumentation中,MLModel有两个预测函数
- func 预测(来自:MLFeatureProvider)-> MLFeatureProvider。根据给定的输入特征值预测输出特征值。
- func 预测(来自:MLFeatureProvider,选项:MLPredictionOptions)-> MLFeatureProvider。根据给定的输入特征值预测输出特征值。
但是,在我自动生成的 MLModel class 中,没有生成带有选项参数的函数。以下代码是我自动生成的预测函数。
func prediction(input: coreML_1denses_80iters_k213_2Input) throws -> coreML_1denses_80iters_k213_2Output {
let outFeatures = try model.prediction(from: input)
let result = coreML_1denses_80iters_k213_2Output(output1: outFeatures.featureValue(for: "output1")!.multiArrayValue!, lstm_1_h_out: outFeatures.featureValue(for: "lstm_1_h_out")!.multiArrayValue!, lstm_1_c_out: outFeatures.featureValue(for: "lstm_1_c_out")!.multiArrayValue!)
return result
}
func prediction(input1: MLMultiArray, input2: MLMultiArray, lstm_1_h_in: MLMultiArray?, lstm_1_c_in: MLMultiArray?) throws -> coreML_1denses_80iters_k213_2Output {
let input_ = coreML_1denses_80iters_k213_2Input(input1: input1, input2: input2, lstm_1_h_in: lstm_1_h_in, lstm_1_c_in: lstm_1_c_in)
return try self.prediction(input: input_)
}
注意: 顺便说一句,我想找到带有 "options" 参数的预测函数的原因是这个错误消息:
[coreml] Cannot evaluate a sequence of length 600, which is longer than maximum of 400.
而且我找到了一个名为 "usesCPUOnly" 的 solution, which is adding a forceCPU Flag in prediction function. The option can be found in MLPredictionOptions。但是,我找不到放置选项的地方。
一种方法是在自动生成的 class(在不同的源文件中)的 extension
中添加您自己的预测方法。
感谢@Matthijs Hollemans。我找到了解决方案。只需编写我自己的扩展并像这样覆盖预测功能。
func prediction(input: model_1denses_50iters_k213Input) throws -> model_1denses_50iters_k213Output {
let options = MLPredictionOptions()
options.usesCPUOnly = true
let outFeatures = try model.prediction(from: input, options:options)
let result = model_1denses_50iters_k213Output(output1: outFeatures.featureValue(for: "output1")!.multiArrayValue!, lstm_85_h_out: outFeatures.featureValue(for: "lstm_85_h_out")!.multiArrayValue!, lstm_85_c_out: outFeatures.featureValue(for: "lstm_85_c_out")!.multiArrayValue!)
return result
}