问题描述
对于我的论文,我正在使用设备上的培训来更新一个模型,该模型使用图像(CVPixelBuffers)作为输入来进行预测。
对于培训,我使用200张尺寸为224x224的图像。有两层正在更新。它们都是innerProducts(1000x12167和1x1000)。由于这些参数很多,因此我尝试将它们缩小为一层(1x12167),但这影响不大。
一旦MLUpdateTask启动,内存使用量将跃升至⁓1,3GB(也带有减少的参数)。训练已完成,但是当使用以下方式保存和加载更新的模型时
finalContext.model.write(to: fileURL)
model = model_updatable(contentsOf: fileURL)
由于内存问题而终止。是什么导致此问题,并且有办法绕过它?将输入从图像更改为multiArrays是否会有区别?
编辑: 使用20张图像作为输入仅会导致训练期间使用⁓1,1GB的内存,并允许该应用程序保存/加载更新的模型,而总最大内存使用量为1,39 GB。可悲的是我确实需要输入200张图像。
亲切的问候尼尔斯
解决方法
谁知道会发生什么... Core ML是一个黑匣子,我们无法查看内部情况。
您的模型可能太大而无法在设备上进行更新。
但是,有时由于错误,Core ML内存使用量会爆炸。我建议向Apple提交错误报告。