我很困惑使用 coreml3 工具使 mlmodel 可更新

Posted

技术标签:

【中文标题】我很困惑使用 coreml3 工具使 mlmodel 可更新【英文标题】:I am confused to make mlmodel updatable using coreml3 tools 【发布时间】:2020-06-24 08:22:36 【问题描述】:

我有一个使用mobilenetv2训练的regressor mlmodel。最后几层如下:

我想将此 mlmodel 制作为可更新的 mlmodel 并训练 innerProduct 层(pytorch 中的全连接层)。我已将引用此博客的 mlmodel 转换为: https://machinethink.net/blog/coreml-training-part4/ 。但我发现可更新的 mlmodel 的第二个训练输入默认设置为“score_true”,它只是一个值(数据类型:int32)。

然而,softmax 层的输出是一个具有 10 个浮点值的向量。那么如何将第二个训练输入设置为一个向量,因为 ground truth 是一个具有 10 个浮点值的向量。

我查找了CrossEntropyLoss int coremltools3.3的API。它的输入参数可以接受长度为 N 的向量。那么如何将默认生成的 score_true 从 intVal 更改为向量? 非常感谢。

【问题讨论】:

【参考方案1】:

你传入score_true MLMultiArray 的是类的索引。您不需要自己对其进行 one-hot 编码,即无需将其转换为长度为 N 的向量。

【讨论】:

感谢您的回复。我使用的模型不是分类模型。 softmax 层的输出是一个长度为 10 的向量,例如 (0, 0, 0.1, 0.3, 0.5, 0.1, 0, 0, 0, 0 )。然后使用向量计算加权算术平均值 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)。所以我不能只设置 "score_true = 5" ,其中 5 是 max prob val 0.5 的索引。我必须将地面实况值设置为向量。 那么是 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) 你要传入的向量,还是我不理解这个?如果您希望目标是一个向量,您应该手动更改score_true 训练输入的形状和数据类型(使用 coremltools)。

以上是关于我很困惑使用 coreml3 工具使 mlmodel 可更新的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio 中的 Smack 让我很困惑

iOS - 我很困惑这里是如何处理内存的?

核心数据实体属性和关系,我想我很困惑

左右浮动使2列高度相同[重复]

Jetty,Tomcat,Nginx,Geronimo,Glassfish:我很困惑

我很困惑,为啥我必须单独导入函数,如果我导入整个库,这些函数不能导入