我很困惑使用 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 可更新的主要内容,如果未能解决你的问题,请参考以下文章