将Keras的.h5模型转为.mlmodel时遇AttributeError问题求助
解决CoreML转换Keras模型的AttributeError错误
错误原因
你使用的coremltools版本(4.0及以上)已经移除了coremltools.converters.keras模块,统一使用coremltools.convert作为通用转换入口,因此触发AttributeError。
解决方案
方案1:适配新版coremltools(推荐)
直接修改模型转换代码,用coremltools.convert替代旧API,同时优化输入配置:
import coremltools as ct # 若从本地h5文件加载模型,可使用以下代码 # model = tf.keras.models.load_model('C:\\Users\\user\\Desktop\\work.h5') # 转换模型,指定输入为图像类型并匹配训练时的归一化规则 coreml_model = ct.convert( model, inputs=[ct.ImageType(name="image", shape=model.input_shape, scale=1/255)] ) # 保存转换后的MLModel文件 coreml_model.save("C:\\Users\\user\\Desktop\\handwriting.mlmodel")
关键说明:
ct.ImageType明确输入为图像格式,scale=1/255对应训练时的像素归一化操作,CoreML模型可直接接收0-255的原始像素值,无需iOS端额外处理。- 使用TensorFlow内置的Keras加载模型,兼容性更稳定。
方案2:降级coremltools到旧版本(不推荐)
若坚持使用旧版API,可安装coremltools 3.x版本:
pip install coremltools==3.3
安装后原有转换代码可正常运行,但旧版本不支持新的TensorFlow/Keras特性,后续维护存在隐患。
额外优化建议
替换单独的Keras包为TensorFlow整合的tensorflow.keras,避免版本兼容问题,修改导入部分:
import tensorflow as tf from tensorflow.keras.datasets import mnist from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Conv2D, MaxPool2D, Dense, Dropout, Flatten import coremltools as ct
内容的提问来源于stack exchange,提问作者Mohamed Mahmod
相关产品推荐
相关产品推荐

