【问题标题】:How do I turn an array to a model input?如何将数组转换为模型输入?
【发布时间】:2020-03-13 18:41:35
【问题描述】:

我使用 python 中的 coremltools 将用于序列预测的 keras 神经网络模型转换为 mlmodel。

该模型需要像 [1,[2],[3],[4]] 这样的输入,并给出 [5] 的输出。 在python中我会写:

model.predict([1,[2],[3],[4]])

[5]

当我尝试在 swift 中做同样的事情时:

让模型 = 模型()

var 数组:[[Int]] = [1,[2],[3],[4]]

打印(models.prediction(输入:数组))

它给了我这个错误:

无法将类型“[[Int]]”的值转换为预期的参数类型“modelInput”

我无法在家里找到任何东西来像我一样格式化数据以使其在核心 ml 中工作。

如果需要,这里是架构图:

最后,我如何格式化自己的数据以使其与核心 ml 一起使用

【问题讨论】:

  • 我不确定这是不是拼写错误,它必须是 [[1],[2],[3],[4]] 并且是 [[Int]]。我想你错过了开幕[[
  • @user1046037 是的,这是一个错字对不起 stackoverflow 把它改成了那个

标签: python swift keras coreml coremltools


【解决方案1】:

您需要将输入数据放入 15 个(!)不同的 MLMultiArray 对象中。

第一个 MLMultiArray(名为 lists)是您序列的那个。它只需要一个元素。

其他 14 个输入是您的 LSTM 隐藏状态变量。你需要明确地传递这些。

要处理一个数字序列,您必须为序列的每个元素运行一次 Core ML 模型,每次都传入当前隐藏状态,并从模型的输出中读取新的隐藏状态。

这比 Keras 做的工作要多得多。 ;-)

【讨论】:

  • 很抱歉,我有几个问题。如果我将输入训练为 4 的大小(训练数组形状为 (,4,1)),为什么我需要 14 个不同的输入?我可以在哪里参考自己以了解更多信息?
  • 在 Keras 中,LSTM 单元本身会跟踪其内部状态。在 Core ML 中它们没有,您需要管理该状态。你的模型有 7 个 LSTM 单元,每个单元有两个状态向量,即 7 x 2 = 14 个状态向量。您需要提供这些作为模型的输入,并从模型的输出中获取新状态。
【解决方案2】:

对于 Swift 中的单深度数组,您需要将其设置为:

var array: [Int] = [1,2,3,4]

我不认为是这种情况,但是如果您试图获得一个数据结构,其中您有一个“数组数组”,其中每个嵌套数组都是一个具有单个整数成员的数组,那么它会就像:

var array: [[Int]] = [[1], [2], [3], [4]]

【讨论】:

    猜你喜欢
    • 2020-10-05
    • 2023-03-03
    • 2012-06-22
    • 2013-10-12
    • 2011-03-19
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    相关资源
    最近更新 更多