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
相关产品推荐
相关产品推荐

