Keras已是TensorFlow 2.x默认高阶API,迁移本质是统一命名空间与行为对齐;需确保使用tf.keras而非独立keras包,验证版本一致,保存时显式指定SavedModel或HDF5格式,并为自定义层实现get_config/from_config方法。

Keras 已是 TensorFlow 2.x 的默认高阶 API,所谓“迁移”本质上是统一命名空间和行为对齐,不是重写或转换——只要不混用 tf.keras 和独立安装的 keras 包,模型本身无需修改即可运行。
确认你用的是 tf.keras 而不是独立 keras
这是最常踩的坑:独立安装的 keras(pip install keras)与 tensorflow 不同步,会导致 model.save() 报错、自定义层丢失、甚至训练结果不一致。
- 检查导入方式:必须是
from tensorflow import keras或import tensorflow as tf; model = tf.keras.Sequential(...) - 验证来源:打印
keras.__version__应与tf.__version__主版本一致(如都是 2.15.x);若显示2.14.0但tf.__version__是2.15.0,说明用了独立keras - 解决方法:卸载独立
keras(pip uninstall keras),仅保留tensorflow
model.save() 保存路径和格式必须明确指定
TensorFlow 2.x 默认使用 SavedModel 格式,但旧代码若依赖 HDF5(.h5)且未显式声明,可能在某些环境(如 TPU、TF 2.16+)下失败。
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
- 推荐显式保存为 SavedModel:
model.save("my_model")(无后缀,生成目录)——兼容性最好,支持完整计算图和自定义对象 - 如需 HDF5,必须加
save_format="h5":model.save("model.h5", save_format="h5") - 加载时也需对应:
tf.keras.models.load_model("my_model")(SavedModel)或tf.keras.models.load_model("model.h5")(HDF5) - 注意:HDF5 不保存自定义
Layer、Loss或Metric的源码,除非用custom_objects参数显式传入
自定义层/损失函数必须可序列化
TensorFlow 2.x 的 SavedModel 保存机制要求所有自定义类实现 get_config() 和 from_config(),否则 load_model() 会报 ValueError: Unknown layer。
- 最简补救:在自定义类中添加这两个方法,哪怕只返回空字典和默认构造
- 示例:
class MyDense(tf.keras.layers.Layer): def __init__(self, units, **kwargs): super().__init__(**kwargs) self.units = units def build(self, input_shape): self.w = self.add_weight(shape=(input_shape[-1], self.units)) def call(self, x): return tf.matmul(x, self.w) def get_config(self): return {"units": self.units} @classmethod def from_config(cls, config): return cls(**config) - 如果只是临时调试,可用
custom_objects加载:load_model("path", custom_objects={"MyDense": MyDense}),但这不能用于跨环境部署
真正麻烦的从来不是 API 名称变化,而是隐式依赖——比如用 keras.utils.get_file() 下载数据集,它在独立 keras 里指向 Keras 官方 CDN,而在 tf.keras 中已弃用,得换成 tf.keras.utils.get_file() 或直接用 tf.keras.datasets。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










