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

加载Keras模型后无法访问model.output的问题求助

解决加载Keras模型后无法访问model.output的问题

问题根源

加载保存后的Keras模型时,模型的计算图尚未完成实例化——因为没有输入数据触发过前向传播,所以model.output无法获取到已定义的输出张量,进而抛出ValueError: The layer sequential has never been called and thus has no defined output异常。而训练/构建后未保存的模型,因为已经执行过前向传播,输出张量已完成初始化,所以能正常访问。

解决方案

加载模型后,先传入一个与模型输入形状匹配的占位数据运行一次前向传播,触发模型计算图的初始化,之后就能正常访问model.output了。

测试代码修改示例

针对你提供的精简测试代码,修改如下:

import os
import keras.models
import numpy as np

top_dir = '~/PycharmProjects/CIFAKE/data'
model_file = top_dir + os.sep + "keras_model.keras"

# 加载模型
model = keras.models.load_model(model_file)

# 根据Xception默认输入形状生成占位数据(batch_size=1,输入尺寸299*299*3)
dummy_input = np.random.rand(1, 299, 299, 3)
model.predict(dummy_input)  # 运行前向传播,完成模型输出初始化

# 此时可正常访问model.output
model_outputs = model.output

Grad CAM场景代码修改示例

针对你的Grad CAM实现需求,调整后代码如下:

# 加载模型
model = keras.models.load_model(model_file)

# 初始化模型输出
dummy_input = np.random.rand(1, 299, 299, 3)
model.predict(dummy_input)

# 正常构建梯度模型
grad_model = keras.models.Model(
    model.inputs, [model.get_layer(last_conv_layer_name).output, model.output]
)

补充提示

如果不确定模型的输入形状,可通过以下代码查看:

print(model.input_shape)  # 输出类似(None, 299, 299, 3),其中None代表batch维度

再根据输出的形状生成对应占位数据即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 12:57:35