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

TensorFlow保存模型遇TypeError:无法序列化EagerTensor至JSON

解决TensorFlow模型保存时EagerTensor无法序列化的问题

错误原因

报错根源是代码中使用的f1score是TensorFlow的EagerTensor类型,Keras保存模型时会将部分配置序列化为JSON格式,但JSON无法识别EagerTensor对象,导致序列化失败。

解决方案

核心是把EagerTensor转换为普通Python数值(如float),提供两种实现方式:

方式1:调用save_model前转换

在传入f1score参数前,手动将张量转为普通浮点数:

# 转换EagerTensor为普通浮点数,二选一即可
f1score = float(f1score)
# f1score = f1score.numpy()

working_dir=os.getcwd()
subject='chest scans'
save_model(subject, classes, img_size, f1score, working_dir)

方式2:在save_model函数内部自动处理

修改保存函数,增加张量检测与转换逻辑:

def save_model(subject, classes, img_size, f1score, working_dir):
    # 自动检测并转换EagerTensor为普通浮点数
    if hasattr(f1score, 'numpy'):
        f1score = f1score.numpy()
    f1score = float(f1score)
    
    name=subject + '-' + str(len(classes)) + '-(' + str(img_size[0]) + ' X ' + str(img_size[1]) + ')'
    save_id=f'{name}-{f1score:5.2f}.h5'
    model_save_loc=os.path.join(working_dir, save_id)
    model.save(model_save_loc)
    msg= f'model was saved as {model_save_loc}'
    print_in_color(msg, (0,255,255), (100,100,100)) # cyan foreground

额外排查点

如果上述方法无效,需检查模型是否包含自定义层或自定义指标,确保这些组件中所有需要序列化的参数都是普通Python类型(int、float、list等),而非Tensor对象。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 20:15:32