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

使用Pickle转储Keras模型时出现NotFoundError及模型未成功保存问题排查

问题分析与解决方案

先帮你揪出代码里的几个核心问题,这就是模型没成功保存、还报错的原因:

  • 加载模型时参数传错了:pickle.load(model)这里应该传打开的文件对象file,而不是model变量,这一步直接会导致加载逻辑报错
  • 用pickle保存Keras模型本身就不合适:Keras模型包含TensorFlow计算图、权重等复杂的底层结构,pickle这种通用序列化工具没法完整处理这些内容,这就是文件创建了但模型没被正确写入的根本原因,还会引发NotFoundError这类序列化错误

修正后的完整代码

Keras官方提供了专门的模型保存/加载API,比pickle靠谱太多,直接用这个就解决问题了:

import os
import tensorflow as tf

# 检查模型文件是否存在(改用.h5格式,这是Keras模型的标准保存格式)
if os.path.exists("trained_model.h5"):
    print("loading trained model")
    # 用Keras官方方法加载完整模型
    model = tf.keras.models.load_model("trained_model.h5")
else:
    print('creating and training a new model')
    model = tf.keras.models.Sequential()
    model.add(tf.keras.layers.Flatten(input_shape=(28,28)))
    model.add(tf.keras.layers.Dense(units=256, activation=tf.nn.relu))
    model.add(tf.keras.layers.Dense(units=256, activation=tf.nn.relu))
    model.add(tf.keras.layers.Dense(units=10, activation=tf.nn.softmax))
    model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
    model.fit(x_train, y_train, epochs=4)
    # 用官方方法保存完整模型(包含结构、权重、编译配置)
    model.save("trained_model.h5")

额外说明

  • model.save()会把模型的结构、训练好的权重、甚至编译时的优化器和损失函数配置一起保存,加载后直接就能用,不用重新编译
  • 如果只想单独保存权重,可以用model.save_weights("model_weights.h5"),但加载时需要先重建模型结构再调用model.load_weights(),你的场景用完整模型保存更省心
  • 另外你原来的代码里pickle.dump(model, file))多了一个右括号,这也是个小语法错误,修正后的代码里已经去掉了

内容的提问来源于stack exchange,提问作者Lars Jacobs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 02:38:11