我在导出到CoreML的Keras模型中遇到了一个错误,我无法确定它来自何处或是什么导致了它。我正在使用Xcode 9+MacOS 10.13.5 High Sierra+Keras 2.1.5。我无法确定CoreML的版本。
该模型是一个在Keras中创建并导出到CoreML的LSTM(“长短期内存”)模型。我已经成功地将模型链接到我的iOS应用程序中。但是,当我运行这个应用程序时,当我试图从LSTM生成预测时,我得到了以下错误。
2018-07-11 11:47:30.159116-0700 mymlmodelapp[32544:191635] [coreml] Different batch numbers for input features.
2018-07-11 11:47:30.159409-0700 mymlmodelapp[32544:191635] [coreml] Failure in resetSizes.
在这一点上我真的不知所措。我搞不清错误是从哪里来的。我试图在Xcode中设置一个断点,以便在Swift错误时中断,但是断点没有被触发。我可以通过在捕获错误的点设置断点来检查错误实例,但是我不知道如何获取引发错误的点的堆栈跟踪。
因此,在某种程度上,这是关于CoreML+Keras的,但这只是一个关于如何在Xcode中找出错误从何而来的一般问题。
这是有问题的代码。
Foo_Bar
@IBAction func mybuttonAction(_ sender: Any) {
let s: String? = myinput.text
if (s != nil && s!.count > 0) {
guard let input_data = try? MLMultiArray(shape:[1, 4, 2], dataType:.double) else {
fatalError("Unexpected runtime error. MLMultiArray")
}
let w = s!.split(separator: " ")
let x = w.map { s1 in Double(s1) }
var x8 = [Double](repeating: 0.0, count: 8)
for i in 0..<(x.count > 8 ? 8 : x.count) {
if x[i] != nil {
x8[i] = x[i]!
}
}
for i in 0..<8 {
input_data[i] = NSNumber(value: x8[i])
}
let mymodel = myLSTM_regressionModel_sos06252018 ()
do {
let lstm_input = myLSTM_regressionModel_sos06252018Input (Foo_Bar: input_data)
let output_data = try mymodel.prediction (input: lstm_input)
let y = output_data.featureValue (for: "Predictions")
let z = y?.multiArrayValue
myoutput.text = String(z!.count)
}
catch {
myoutput.text = "OOPS: \(error)"
}
}
}
编辑2018-07-27:我发现这个例子是通过改变起作用的
shape:[1, 4, 2]
到
shape:[4, 1, 2]