В своей диссертации я использую обучение на устройстве для обновления модели, которая использует изображения (CVPixelBuffers) в качестве входных данных для прогнозирования.
Для обучения я использую 200 изображений размером 224x224. Есть два слоя, которые обновляются. Оба из них innerProducts (1000x12167 и 1x1000). Так как это много параметров, я попытался уменьшить их до одного слоя (1x12167), но это мало на что повлияло.
Как только запускается MLUpdateTask, использование памяти подскакивает до ⁓1,3 гигабайта (также с уменьшенными параметрами). Обучение завершено, но при сохранении и загрузке обновленной модели с помощью
finalContext.model.write(to: fileURL)
model = model_updatable(contentsOf: fileURL)
он прекращен из-за проблем с памятью. Что вызывает эту проблему и есть ли способ ее обойти? Будет ли иметь значение изменение ввода с изображений на мультимассивы?
Редактировать. Использование 20 изображений в качестве входных данных приводит к использованию только ⁓1,1 гигабайта во время обучения и позволяет приложению сохранять/загружать обновленную модель с общим максимальным использованием памяти 1,39 гигабайт. К сожалению, мне нужно ввести 200 изображений.
С уважением Нильс