Постоянно тренировать модель CoreML после доставки
Рассматривая новый CoreML API, я не вижу возможности продолжить обучение модели после генерации.mlmodel и ее объединения в ваше приложение. Это заставляет меня думать, что я не смогу выполнять машинное обучение с контентом или действиями моего пользователя, потому что модель должна быть полностью обучена заранее.
Есть ли способ добавить данные тренировок в мою обученную модель после доставки?
РЕДАКТИРОВАТЬ: Я только что заметил, что вы можете инициализировать сгенерированный класс модели из URL, так что, возможно, я могу опубликовать новые данные обучения на моем сервере, повторно сгенерировать обученную модель и загрузить ее в приложение? Похоже, что это будет работать, но это полностью противоречит аспекту конфиденциальности, заключающемуся в возможности использовать ML без данных пользователя, покидающих устройство.
7 ответов
Файл.mlmodel компилируется Xcode в структуру.mlmodelc (которая на самом деле является папкой внутри вашего пакета приложения).
Ваше приложение может загружать новую.ml-модель с сервера, но я не думаю, что вы можете запустить компилятор Core ML из своего приложения.
Возможно, ваше приложение сможет загрузить скомпилированные данные.mlmodelc с сервера, скопировать их в каталог документов приложения и создать из него модель. Попробуйте это.;-)
(Предполагается, что App Store не выполняет никакой дополнительной обработки данных.mlmodelc, пока не упакует ваше приложение и не отправит его пользователю.)
Apple недавно добавила новый API для компиляции модели на устройстве. Теперь вы можете скачать свою модель и скомпилировать ее на устройстве
CoreML 3 теперь поддерживает персонализацию модели на устройстве. Вы можете улучшить свою модель для каждого пользователя, сохраняя конфиденциальность его данных.
Core ML поддерживает вывод, но не обучение на устройстве.
Вы можете обновить модель, заменив ее новой с сервера, но это заслуживает отдельного вопроса.
Теперь с iOS11 beta4 вы можете скомпилировать модель, скачать с сервера.
( Подробности)
Для динамического обновления модели (без обновления всего приложения) вам необходимо использовать MPS (Metal Performance Shader) напрямую, а не полагаться на.mlmodel, который должен быть связан с приложением.
Это означает, что вам нужно вручную построить нейронную сеть, написав некоторый код Swift (вместо использования coremltools для непосредственного преобразования существующих моделей), и подавать различные веса для каждого слоя, что является небольшой работой, но не ракетостроением.
Это хорошее видео для просмотра, если вы хотите узнать больше о MPS.
В качестве альтернативы комплектованию
mlmodel
с помощью приложения вы можете загружать, а затем компилировать модели в приложении CoreML. Для этого нужно всего лишь скачатьфайл на устройство пользователя с помощью, например, URLSession. И после этого вы должны скомпилировать
model definition
вызывая метание
compileModel(at:)
метод типа.
let newCompiledModel = try MLModel.compileModel(at: modelDescriptionURL)
Вы получите новый скомпилированный файл модели с тем же именем, что и описание модели, но его окончание будет
mlmodelc
. В конце концов, создайте новый экземпляр MMLModel, передав URL-адрес скомпилированной модели его инициализатору.
let model = try MLModel(contentsOf: newCompiledModel)
Однако помните, что процесс компиляции может занять много времени и не должен выполняться в основном потоке.