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

TensorFlow模型保存加载后预测报错:AttributeError: 'list'无'keys'属性

解决TensorFlow加载模型后predict报错:AttributeError: 'list' object has no attribute 'keys'

我之前也踩过这个坑!大概率是你加载模型后拿到的不是正经的Keras模型实例,而是个列表,所以调用predict的时候才会触发这个错误。结合TensorFlow的常见使用场景,我整理了几个排查和解决的方向:

  • 检查模型加载后的对象类型
    先在加载模型后加一行代码确认类型:

    model = tf.keras.models.load_model("你的模型路径")
    print(type(model))
    

    如果输出是类似<class 'list'>,那说明加载逻辑返回了模型列表(比如你保存了多个模型权重或者用了特殊的保存方式),这时候需要取列表里的第一个模型实例再调用predict:

    model = model[0]
    predictions = model.predict(你的输入数据)
    
  • 确认保存和加载的方式匹配
    TensorFlow有几种模型保存格式,保存和加载方式不匹配也会导致异常:

    • 如果用model.save("my_model.h5")保存HDF5格式,必须用tf.keras.models.load_model("my_model.h5")加载,这样会直接返回Keras模型实例
    • 如果用tf.saved_model.save(model, "my_saved_model")保存SavedModel格式,要是直接用tf.saved_model.load()加载,返回的是SavedModel对象,不能直接调用predict,这时候可以改用tf.keras.models.load_model("my_saved_model")来加载成Keras模型,或者用签名函数做预测:
      loaded_model = tf.saved_model.load("my_saved_model")
      infer_func = loaded_model.signatures["serving_default"]
      result = infer_func(tf.constant(你的输入数据))
      
  • 排查输入数据的格式
    虽然你的错误提示指向列表没有keys方法,但也有可能是输入数据的问题:如果你的模型是多输入模型,期望接收字典格式的输入,但你传入了列表,也可能触发类似错误。比如模型输入层有两个命名输入,那应该这样传参:

    predictions = model.predict({"input_1": data1, "input_2": data2})
    

    而不是直接传[data1, data2](除非模型的输入是按顺序的列表输入)。

  • 检查模型路径是否正确
    看看你构建模型路径的时候有没有出错,比如SYM、TYPE这些变量拼接路径时,会不会指向了包含多个模型文件的文件夹,导致load_model返回了模型列表?可以打印出最终的模型路径确认一下。

这里给你一个标准的保存-加载-预测流程参考:

# 训练完成后保存模型
model.save("trained_model.h5")

# 后续加载模型并预测
loaded_model = tf.keras.models.load_model("trained_model.h5")
# 假设输入数据是numpy数组或张量
test_data = np.random.rand(1, 10)  # 示例输入
predictions = loaded_model.predict(test_data)
print(predictions)

内容的提问来源于stack exchange,提问作者T.Melino

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:14:12