You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 10:09:55