已知问题

新项目建议优先使用 YDF

YDF 是谷歌用于训练决策森林(Decision Forests)的新库。

YDF 扩展了 TF-DF 的功能,提供了新特性、简化的 API、更快的训练速度、更新后的文档以及与主流机器学习库更好的兼容性。

下文提到的部分问题已在 YDF 中得到解决。

Windows Pip 包不可用

TensorFlow Decision Forests 目前尚未提供 Windows Pip 包。

变通方法

与 Keras 3 不兼容

目前尚未实现与 Keras 3 的兼容。请使用 tf_keras 或 2.16 之前的 TensorFlow 版本。或者,使用 ydf

未经 Conda 测试

虽然 TF-DF 可能可以在 Conda 下运行,但这未经测试,且我们目前未在 conda-forge 上维护相关包。

与旧版本或 nightly 版本的 TensorFlow 不兼容

TensorFlow 的 ABI 在不同发布版本间并不兼容。由于 TF-DF 依赖于自定义的 TensorFlow C++ 操作,每个版本的 TF-DF 都绑定到特定版本的 TensorFlow。最新发布的 TF-DF 版本始终与最新发布的 TensorFlow 版本绑定。

基于这些原因,当前版本的 TF-DF 可能与旧版本或 TensorFlow 的 nightly 构建版本不兼容。

如果使用了不兼容的 TF 和 TF-DF 版本,您将看到类似以下的晦涩错误:

tensorflow_decision_forests/tensorflow/ops/training/training.so: undefined symbol: _ZN10tensorflow11GetNodeAttrERKNS_9AttrSliceEN4absl14lts_2020_09_2311string_viewEPSs
  • 请使用与您的 TensorFlow 版本兼容的 TF-DF 版本。

兼容性表

下表展示了 tensorflow_decision_forests 及其依赖项之间的兼容性

tensorflow_decision_forests tensorflow
1.12.0 2.19.0
1.11.0 2.18.0
1.10.0 2.17.0
1.9.2 2.16.2
1.9.1 2.16.1
1.9.0 2.16.1
1.8.0 - 1.8.1 2.15.0
1.6.0 - 1.7.0 2.14.0
1.5.0 2.13.0
1.3.0 - 1.4.0 2.12.0
1.1.0 - 1.2.0 2.11.0
1.0.0 - 1.0.1 2.10.0 - 2.10.1
0.2.6 - 0.2.7 2.9.1
0.2.5 2.9
0.2.4 2.8
0.2.1 - 0.2.3 2.7
0.1.9 - 0.2.0 2.6
0.1.1 - 0.1.8 2.5
0.1.0 2.4
  • 解决方案 #2:将您的预处理函数包装在另一个函数中,对其输入进行 降维 (squeeze)

并非所有模型都支持分布式训练和分发策略

除非另有说明,否则模型均在单机上进行训练,且与分发策略不兼容。例如,GradientBoostedTreesModel 不支持分布式训练,而 DistributedGradientBoostedTreesModel 则支持。

变通方法

  • 请使用支持分发策略的模型(例如 DistributedGradientBoostedTreesModel),或对数据集进行降采样,使其能够适应单机运行。

不支持 GPU / TPU。

TF-DF 不支持 GPU 或 TPU 训练。但是,使用 AVX 指令编译可能会加快推理服务速度。

不支持 model_to_estimator

TF-DF 未实现将训练好/未训练的模型转换为 Estimator 格式所需的 API。

加载的模型与 Python 模型行为不一致。

虽然通过 Keras API 进行了抽象,但在 Python 中实例化的模型(例如使用 tfdf.keras.RandomForestModel())和从磁盘加载的模型(例如使用 tf_keras.models.load_model())行为可能不同。值得注意的是,Python 实例化的模型会自动执行必要的类型转换。例如,如果将 float64 特征输入到期望 float32 的模型中,该转换会隐式执行。然而,对于从磁盘加载的模型,这种转换是不可行的。因此,务必确保训练数据和推理数据具有完全相同的类型。

Tensorflow 特征名称清理

Tensorflow 会清理特征名称,例如,可能会将它们转换为小写。