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

无法在Flask环境中加载Kaggle训练的深度学习模型

问题解决步骤

核心原因分析

问题根源在于Kaggle与Flask环境的TensorFlow/Keras版本不一致,同时混合使用了独立Keras和TensorFlow集成的Keras导入,导致模型加载时无法识别标准层(如BatchNormalization)。


具体修复方案

1. 统一使用TensorFlow集成的Keras导入

删除所有独立Keras(import keras)的导入语句,全部替换为TensorFlow官方的Keras模块:

from flask import Flask, render_template, request, jsonify
from werkzeug.utils import secure_filename
from flask_sqlalchemy import SQLAlchemy
import numpy as np
import tensorflow as tf
from tensorflow.keras.models import Sequential, model_from_json
from tensorflow.keras.layers import BatchNormalization
import os
import pickle
import librosa

2. 加载模型时传入自定义层映射

在加载JSON模型时,明确将BatchNormalization传入custom_objects参数,让模型加载器识别该层:

json_file = open('Backend/kaggle/CNN_model.json', 'r')
loaded_model_json = json_file.read()
json_file.close()
# 传入custom_objects解决未知层问题
loaded_model = model_from_json(loaded_model_json, custom_objects={'BatchNormalization': BatchNormalization})
loaded_model.load_weights("Backend/kaggle/best_model1_weights.h5")

3. 严格匹配Kaggle的TensorFlow版本

这是最关键的一步:

  • 在Kaggle环境中运行以下代码查看版本:
    import tensorflow as tf
    print(tf.__version__)
    
  • 在Flask的虚拟环境中安装完全相同的版本:
    pip install tensorflow==<Kaggle上的版本号>
    
  • 同时确保librosa、numpy等依赖库的版本与Kaggle环境一致,避免兼容性冲突。

4. 可选:改用完整模型保存/加载方式

如果上述步骤仍有问题,建议在Kaggle中直接保存完整模型,而非拆分JSON和权重:

# Kaggle上的保存代码
model.save("full_CNN_model.h5")

在Flask中加载时只需一行代码:

loaded_model = tf.keras.models.load_model("Backend/kaggle/full_CNN_model.h5")

这种方式无需处理自定义层,兼容性更好。


内容的提问来源于stack exchange,提问作者Frankie vara

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:52:39