CoreML如何规范输入数组

时间:2019-02-09 13:59:15

标签: ios scikit-learn coreml coremltools

我尝试将sklearn规范化器转换为coreml模型,如下所示:

normalized = sklearn.preprocessing.Normalizer()

coreml_model = coremltools.converters.sklearn.convert(normalized)

但是我得到这个错误:

“错误处理功能列表:如果给出单个功能名称,则必须提供num_dimensions”

如何设置“ num_dimensions ”?

另一个选择是直接在CoreML中使用Normalizer:

https://apple.github.io/coremltools/coremlspecification/sections/FeatureEngineering.html#normalizer

但是,零文档说明了如何在IOS中利用此功能。例如,如何在浮点数组上运行它?

2 个答案:

答案 0 :(得分:1)

要在Core ML中创建规范化器,您需要构建管道模型。管道只是一系列Core ML模型,捆绑为新的Core ML模型。

管道中的第一个模型将是Normalizer模型。第二个是您的常规模型。然后,规范化模型的输出将成为常规模型的输入。

您可以手动执行此操作(请参阅我的书,在我的个人资料中的链接),但实际上,最简单的方法是让scikit-learn转换器处理此问题,因为这就是目的。

发生num_dimensions错误是因为仅转换sklearn Normalizer并不能为coremltools转换器提供足够的信息来使用。如果要在scikit-learn中进行标准化,则看起来还需要在scikit-learn中创建管道模型并将其转换。

答案 1 :(得分:0)

您可以这样指定输入尺寸:

coreml_model = coremltools.converters.sklearn.convert(normalized, input_features={'input': [0, 1, 2]})

其中input是输入要素名称(默认为input),列表([0, 1, 2])是输入要素ID(为简单起见,您可以执行{ {1}},或像我一样明确列出索引值。