代码之家  ›  专栏  ›  技术社区  ›  Robert Dodier

导出到CoreML的Keras模型中出现神秘的“输入特性的批次号不同”错误

  •  2
  • Robert Dodier  · 技术社区  · 7 年前

    我在导出到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]

    0 回复  |  直到 5 年前
    推荐文章