CoreML как нормализовать входной массив

Я пытаюсь преобразовать нормализатор sklearn в модель coreml следующим образом:

normalized = sklearn.preprocessing.Normalizer()

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

Но я получаю эту ошибку:

"Список функций обработки ошибок: если задано одно имя функции, то необходимо указать num_dimensions"

Как я могу установить "num_dimensions"?

Другой вариант - напрямую использовать нормализатор в CoreML:

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

Но нет никакой документации, как я могу использовать эту функциональность в IOS. Как я могу запустить это на массиве с плавающей точкой, например?

1 ответ

Чтобы создать нормализатор внутри Core ML, вам нужно построить модель конвейера. Конвейер - это просто последовательность моделей Core ML, объединенных в новую модель Core ML.

Первая модель в трубопроводе будет Normalizer модель. Вторым будет ваша обычная модель. Выходные данные из модели нормализатора затем становятся входными данными для вашей обычной модели.

Вы можете сделать это вручную (см. Мою книгу, ссылка в моем профиле), но на самом деле проще всего позволить конвертеру scikit-learn справиться с этим, потому что для этого он и нужен.

num_dimensions ошибка происходит потому, что просто конвертируя склеарн Normalizer не дает конвертеру coremltools достаточно информации для работы. Если вы хотите выполнить нормализацию в scikit-learn, похоже, вам также необходимо создать модель конвейера в scikit-learn и преобразовать ее.

Вы можете указать входные размеры следующим образом:

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

куда input здесь имя входной функции (которая input по умолчанию) и список ([0, 1, 2]) является идентификатором входной функции (для простоты вы можете просто сделать range(num_features)или просто перечислите значения индекса явно, как я).

Другие вопросы по тегам