Постоянно тренировать модель CoreML после доставки

Рассматривая новый CoreML API, я не вижу возможности продолжить обучение модели после генерации.mlmodel и ее объединения в ваше приложение. Это заставляет меня думать, что я не смогу выполнять машинное обучение с контентом или действиями моего пользователя, потому что модель должна быть полностью обучена заранее.

Есть ли способ добавить данные тренировок в мою обученную модель после доставки?

РЕДАКТИРОВАТЬ: Я только что заметил, что вы можете инициализировать сгенерированный класс модели из URL, так что, возможно, я могу опубликовать новые данные обучения на моем сервере, повторно сгенерировать обученную модель и загрузить ее в приложение? Похоже, что это будет работать, но это полностью противоречит аспекту конфиденциальности, заключающемуся в возможности использовать ML без данных пользователя, покидающих устройство.

7 ответов

Решение

Файл.mlmodel компилируется Xcode в структуру.mlmodelc (которая на самом деле является папкой внутри вашего пакета приложения).

Ваше приложение может загружать новую.ml-модель с сервера, но я не думаю, что вы можете запустить компилятор Core ML из своего приложения.

Возможно, ваше приложение сможет загрузить скомпилированные данные.mlmodelc с сервера, скопировать их в каталог документов приложения и создать из него модель. Попробуйте это.;-)

(Предполагается, что App Store не выполняет никакой дополнительной обработки данных.mlmodelc, пока не упакует ваше приложение и не отправит его пользователю.)

Apple недавно добавила новый API для компиляции модели на устройстве. Теперь вы можете скачать свою модель и скомпилировать ее на устройстве

CoreML 3 теперь поддерживает персонализацию модели на устройстве. Вы можете улучшить свою модель для каждого пользователя, сохраняя конфиденциальность его данных.

https://developer.apple.com/machine-learning/core-ml/

Core ML поддерживает вывод, но не обучение на устройстве.


Вы можете обновить модель, заменив ее новой с сервера, но это заслуживает отдельного вопроса.

Теперь с iOS11 beta4 вы можете скомпилировать модель, скачать с сервера.

( Подробности)

Для динамического обновления модели (без обновления всего приложения) вам необходимо использовать MPS (Metal Performance Shader) напрямую, а не полагаться на.mlmodel, который должен быть связан с приложением.

Это означает, что вам нужно вручную построить нейронную сеть, написав некоторый код Swift (вместо использования coremltools для непосредственного преобразования существующих моделей), и подавать различные веса для каждого слоя, что является небольшой работой, но не ракетостроением.

Это хорошее видео для просмотра, если вы хотите узнать больше о MPS.

https://developer.apple.com/videos/play/wwdc2017/608/

В качестве альтернативы комплектованию mlmodelс помощью приложения вы можете загружать, а затем компилировать модели в приложении CoreML. Для этого нужно всего лишь скачатьфайл на устройство пользователя с помощью, например, URLSession. И после этого вы должны скомпилировать model definitionвызывая метание compileModel(at:)метод типа.

      let newCompiledModel = try MLModel.compileModel(at: modelDescriptionURL)

Вы получите новый скомпилированный файл модели с тем же именем, что и описание модели, но его окончание будет mlmodelc. В конце концов, создайте новый экземпляр MMLModel, передав URL-адрес скомпилированной модели его инициализатору.

      let model = try MLModel(contentsOf: newCompiledModel)

Однако помните, что процесс компиляции может занять много времени и не должен выполняться в основном потоке.

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