Streamlit应用加载CNN模型报错:'NoneType'对象无'input'属性
解决方法
核心问题
报错里的cnn_model是None,说明你从Jupyter导出的CNN模型没在Streamlit脚本里成功加载。
分步排查修复
确认模型导出方式正确
在Jupyter里导出Keras模型必须用官方方法,别用pickle/joblib:# 导出为H5格式 cnn_model.save('cnn_model.h5') # 或者导出为SavedModel格式(推荐) cnn_model.save('cnn_saved_model')检查Streamlit中的加载代码与路径
加载时要确保路径正确,模型文件和脚本的相对位置要对应:import tensorflow as tf # 加载H5模型 cnn_model = tf.keras.models.load_model('cnn_model.h5') # 或者加载SavedModel cnn_model = tf.keras.models.load_model('cnn_saved_model')如果模型不在脚本同目录,用绝对路径,比如:
cnn_model = tf.keras.models.load_model(r'c:\Users\Chydo\Dissertation\final\cnn_model.h5')验证模型加载状态
在加载代码后加一行验证代码,确认模型是否加载成功:print(type(cnn_model)) # 应该输出类似 <class 'keras.engine.sequential.Sequential'>如果输出还是
None,要么是路径写错了,要么是模型文件损坏,重新导出一次试试。处理自定义组件的情况
如果你的CNN模型包含自定义层、自定义损失或度量函数,加载时要指定custom_objects参数:# 假设你有自定义层CustomLayer和自定义损失custom_loss cnn_model = tf.keras.models.load_model( 'cnn_model.h5', custom_objects={'CustomLayer': CustomLayer, 'custom_loss': custom_loss} )
Logistic Regression模型注意事项
如果你的LR模型是用Scikit-learn训练的,用joblib/pickle导出加载没问题,但要保证Jupyter和Streamlit环境的Scikit-learn版本一致,避免版本兼容问题。
内容的提问来源于stack exchange,提问作者2000Vee
相关产品推荐
相关产品推荐

