菜单

TensorFlow兼容层

相关源文件

本文档描述了 Keras 3 中的 TensorFlow 兼容层,它使得 Keras 3 能够在现有代码库中作为 tf.keras 的直接替代品使用。此功能对于从 TensorFlow 的原生 Keras API 平滑迁移到多后端 Keras 3 框架至关重要。

有关如何在 Keras 3 中配置后端的信息,请参阅后端配置

概述与目的

TensorFlow 兼容层充当现有 tf.keras 代码与新的多后端 Keras 3 框架之间的桥梁。它允许开发人员:

  1. 以极少或无需修改代码的方式,在 Keras 3 中直接替代 tf.keras
  2. 逐步将 tf.keras 代码库迁移到多后端 Keras 3 架构
  3. 无需重写现有代码即可访问多个后端选项(JAX、PyTorch 等)

架构图

来源:README.md98-111 keras/__init__.py1-80 keras/api/__init__.py1-61

实现机制

TensorFlow 兼容层在 Keras 3 内部以一种特殊的嵌套包结构实现,位于 keras/api/_tf_keras/keras/。这种结构模拟了原始 tf.keras API 的组织方式,同时将调用重定向到相应的 Keras 3 实现。

API 生成过程

兼容层在 API 生成过程中由 api_gen.py 脚本自动生成。

来源:api_gen.py36-134 api_gen.py188-196

关键实现细节

此过程中最重要的部分是 api_gen.py 中的 create_legacy_directory() 函数,该函数:

  1. keras/api/_tf_keras/keras/ 创建目录结构
  2. keras/api/ 中的 API 复制到兼容层,并进行适当修改
  3. 更新导入路径,以确保与 tf.keras 导入模式兼容
  4. 处理旧版模块,以确保它们在新结构中正常工作

该函数具体执行以下操作:

  • 创建 _tf_keras/keras 目录结构
  • 复制原生 Keras 3 API 中的所有 API 模块
  • 修改导入以指向正确的位置
  • 处理旧版模块的特殊情况

来源:api_gen.py36-134

API 结构和映射

TensorFlow 兼容层保持与 tf.keras 相同的 API 结构,但在内部将调用重定向到 Keras 3 实现。

来源:keras/api/_tf_keras/keras/__init__.py1-59 keras/api/__init__.py1-61

模块结构

下表显示了 tf.keras 模块与它们在 Keras 3 中相应位置的映射关系:

tf.keras 模块Keras 3 兼容层原生 Keras 3 API
tf.keras.modelskeras.api._tf_keras.keras.modelskeras.api.models
tf.keras.layerskeras.api._tf_keras.keras.layerskeras.api.layers
tf.keras.losseskeras.api._tf_keras.keras.losseskeras.api.losses
tf.keras.metricskeras.api._tf_keras.keras.metricskeras.api.metrics
tf.keras.optimizerskeras.api._tf_keras.keras.optimizerskeras.api.optimizers
tf.keras.callbackskeras.api._tf_keras.keras.callbackskeras.api.callbacks
tf.keras.preprocessingkeras.api._tf_keras.keras.preprocessingkeras.api.preprocessing

来源:keras/api/_tf_keras/keras/__init__.py1-59 keras/api/__init__.py1-61

用途

基本用法

TensorFlow 兼容层旨在作为 tf.keras 的直接替代品。在大多数情况下,用户只需将

替换为

,其现有 tf.keras 代码即可继续运行,几乎无需或无需任何改动。

包解析

导入 keras 时,Python 包系统会解析到 Keras 3 包。TensorFlow 兼容层使 Keras 3 包能够模拟 tf.keras 的行为,确保为 tf.keras 编写的代码继续正常工作。

来源:README.md98-111

迁移考量

虽然 TensorFlow 兼容层旨在提供与 tf.keras 的完全兼容性,但仍有一些注意事项需要牢记:

  1. 模型保存格式:确保对 model.save() 的调用使用最新的 .keras 格式,而不是旧的 TensorFlow 特定格式。

  2. 自定义组件:如果您的 tf.keras 模型包含自定义组件(例如,自定义层),则:

    • 对于 TensorFlow 后端,它们应该无需更改即可工作
    • 对于其他后端(JAX、PyTorch),您可能需要使它们与后端无关
  3. 数据格式:Keras 3 可以处理各种数据格式,无论后端如何。

    • tf.data.Dataset 管道适用于任何后端
    • PyTorch DataLoaders 适用于任何后端
    • NumPy 数组适用于任何后端
  4. 后端特定功能:某些高级的 TensorFlow 特定功能可能在其他后端中不可用,或者可能需要不同的方法。

来源:README.md98-111

技术实现细节

初始化文件结构

兼容层的 __init__.py 文件从原生 Keras 3 API 导入模块,并通过兼容层结构将其暴露。

这创建了一个并行 API 结构,它镜像了 tf.keras,同时底层使用了 Keras 3 的实现。

来源:keras/api/_tf_keras/keras/__init__.py1-59

生成代码处理

API 生成过程包含对生成代码的特殊处理:

  1. 生成文件顶部的 DO NOT EDIT 注释表明它们是自动生成的。
  2. 导入路径会进行调整,以使用正确的包结构。
  3. 旧版模块经过处理,以确保与现有代码的兼容性。
  4. 版本信息通过 API 正确传播。

来源:keras/api/_tf_keras/keras/__init__.py1-6 keras/api/__init__.py1-6

结论

TensorFlow 兼容层是 Keras 3 的一个关键组件,它为从 tf.keras 平滑迁移到多后端 Keras 3 框架提供了途径。通过提供 tf.keras 的直接替代品,它允许开发人员逐步迁移其代码库,同时利用 Keras 3 中的新功能和后端选项。

通过精心的 API 设计和自动生成,兼容层确保现有 tf.keras 代码能够继续运行,几乎无需或无需任何改动,同时仍可完全利用 Keras 3 的多后端架构的强大功能。