Swift Playgrounds中CoreML性别分类模型提取类型报错求助
我之前在Swift Playgrounds里折腾CoreML性别分类模型的时候,完完全全碰到过一模一样的错误!这个报错的核心是CoreML找不到正确的编译后模型文件,或者模型没有被Playgrounds正确处理,给你几个亲测有效的解决步骤:
重新确认模型文件的放置与关联
别只是手动把Gender.mlmodel拖进Resources文件夹就完事了,你可以试试先把它从项目里删掉,然后重新拖入,拖的时候要确保在弹出的对话框里(如果有的话)勾选了正确的目标(Playgrounds项目本身)。有时候Playgrounds的文件夹结构只是视觉上的,实际资源没被正确关联到运行环境里。手动编译模型文件
有时候Playgrounds不会自动编译.mlmodel文件成CoreML能识别的.mlmodelc包。你可以打开Xcode,把Gender.mlmodel拖进去,右键点击它选择Compile Model,等它生成同名的Gender.mlmodelc文件夹,然后把这个编译好的文件夹拖进Playgrounds的Resources里,替换原来的.mlmodel文件,再试试加载。修正模型加载代码
别自己瞎写路径加载!用自动生成的Gender.swift里的初始化方法,正确的加载方式应该是:do { let configuration = MLModelConfiguration() let genderModel = try Gender(configuration: configuration) // 这里继续你的模型使用逻辑 } catch { print("模型加载失败:\(error.localizedDescription)") }如果你之前用了
try!硬解,换成do-catch能拿到更详细的错误信息,别用try!——哪怕在Playgrounds里也容易踩坑。清理Playgrounds缓存
Playgrounds的缓存有时候会抽风,导致资源不更新。你可以关闭Playgrounds,然后去~/Library/Containers/com.apple.swiftplaygrounds/Data/Library/Caches这个路径删掉里面的缓存文件,再重新打开项目试试。检查模型文件本身是否损坏
用Xcode打开Gender.mlmodel,看看能不能正常预览模型的输入输出,有没有报错提示。如果模型本身有问题,比如训练导出时出错,那不管怎么放都加载不了,得重新导出正确的模型文件。
补充一下:这个错误
Error Domain=com.apple.CoreML Code=0本质上就是CoreML在尝试读取编译后的模型数据流时失败,要么是找不到文件,要么是文件格式不对,所以从“文件是否存在、是否被正确编译、路径是否正确”这几个方向排查就对了。
内容的提问来源于stack exchange,提问作者Bradley H

