CoreML –如何创建简单的MLFeatureProvider类

时间:2019-01-29 16:26:16

标签: swift macos coreml coremltools mlfeatureprovider

我有一个MLModel,其中包含一个名为length的输入列和一个名为depth的输出列。

您给它一个长度,它可以预测深度。

我知道还有其他方法可以做到这一点,但这完全是为了学习CoreML。

我需要构建一个MLFeatureProvider类以获取该长度并输出深度。

我不确定如何创建该类,因为这是我第一次与CoreML打交道,并且因为与往常一样,Apple不在乎创建体面的文档。

这就是我所拥有的

class FeatureProviderX: MLFeatureProvider {
  var featureNames: Set<String> {
    get {
      return  ["length", "depth"]
    }
  }

  func featureValue(for featureName: String) -> MLFeatureValue? {
    guard featureName == "length" else {
      return MLFeatureValue(????????????) \\1
    }
  }

}

我不确定此类在远程上是否正确。

如果正确,应该如何写\\1

2 个答案:

答案 0 :(得分:1)

类似这样的东西:

class FeatureProviderX: MLFeatureProvider {
  let length: Double

  init(length: Double) {
    self.length = length
  }

  func featureValue(for featureName: String) -> MLFeatureValue? {
    guard featureName == "length" else {
      return MLFeatureValue(double: length)
    }
  }

  ...

要使用它进行预测,请创建一个FeatureProviderX的新实例,并将其传递给您的MLModel类。

答案 1 :(得分:0)

Matthijs Hollemans处在正确的轨道上,为我提供了解决方法的线索,但不幸的是,他的解决方案缺少很多东西。

过一会儿,我想出了正确的解决方案...

class FeatureProviderX: MLFeatureProvider {

  var featureNames: Set<String> {
    get {
      return  ["length"]
    }
  }

  var sorteio: Double

  init(length: Double) {
    self.length = length
  }

  func featureValue(for featureName: String) -> MLFeatureValue? {
    if featureName == "length" {
      return MLFeatureValue(double: length)
    }
    return nil
  }
}