我已经训练了一个基于FaceNet的人脸分类模型,当我试图使用converters.sklearn.convert
将模型转换为CoreML模型时,我没有默认嵌入到它的类标签,我如何将类标签添加到我的CoreML模型。
转换模型的当前脚本
classFeatureNames = ("Prediction","Probability")
coreml_model = ct.converters.sklearn.convert(model,input_features='inputArray', output_feature_names=classNames)
coreml_model.save("celebritySix.mlmodel")
使用上述脚本生成的模型返回标签为,[0,1,2,3,4,5],而我期望检测到的人员的各自名称。
From coremltools convert docs:
"如果它是一个分类器,output_feature_names应该是一个2元组名称,给出顶级类预测和每个类的分数数组(默认为" classLabel "one_answers" classScores ")。">
大多数scikit-learn
估计器都有一个classes_
属性,用于存储标签。要么是模型没有使用正确的类标签进行训练,要么是coremltools在转换时没有正确应用属性。
绝笔Y
/N
标签:
import numpy as np
from sklearn.datasets import make_classification
from sklearn.svm import SVC
import coremltools
X, y = make_classification(n_clusters_per_class=1, n_informative=4, n_classes=2)
y_new = np.zeros_like(y, dtype=np.str_)
y_new[y == 0] = "N"
y_new[y == 1] = "Y"
clf = SVC().fit(X, y_new)
# clf.classes_
# ['N' 'Y']
coreml_model = coremltools.converters.sklearn.convert(clf)
coreml_model.save("demo_output.mlmodel")