TensorFlow 决策森林使用的决策森林算法背后的底层引擎已在生产环境中经过广泛测试。此文件列出了一些已知问题。
另请参阅 迁移指南,了解与其他算法不同的行为。
Windows Pip 包不可用
TensorFlow 决策森林尚未作为 Windows Pip 包提供。
解决方法
- 解决方案 #1:在您的 Windows 机器上安装 Windows Subsystem for Linux (WSL) 并按照 Linux 指令操作。
与 Keras 3 不兼容
尚未实现与 Keras 3 的兼容性。请使用 tf_keras 或 TensorFlow 2.16 之前的版本。
未针对 conda 测试
虽然 TF-DF 可能适用于 Conda,但尚未经过测试,我们目前也不维护 conda-forge 上的包。
与旧版或夜间版本的 TensorFlow 不兼容
TensorFlow 的 ABI 在不同版本之间不兼容。由于 TF-DF 依赖于自定义 TensorFlow C++ 操作,因此每个版本的 TF-DF 都与特定版本的 TensorFlow 绑定。最新发布的 TF-DF 版本始终与最新发布的 TensorFlow 版本绑定。
由于这些原因,当前版本的 TF-DF 可能与旧版本或 TensorFlow 的夜间构建版本不兼容。
如果使用不兼容的 TF 和 TF-DF 版本,您将看到诸如以下的 cryptic 错误
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.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:将您的预处理函数包装到另一个函数中,该函数会 压缩 其输入。
并非所有模型都支持分布式训练和分布式策略
除非另有说明,否则模型将在单台机器上进行训练,并且与分布式策略不兼容。例如,GradientBoostedTreesModel
不支持分布式训练,而 DistributedGradientBoostedTreesModel
支持。
解决方法
- 请使用支持分布式策略的模型(例如
DistributedGradientBoostedTreesModel
),或对数据集进行降采样,使其适合单台机器。
不支持 GPU/TPU。
TF-DF 不支持 GPU 或 TPU 训练。但是,使用 AVX 指令进行编译可能会加快服务速度。
不支持 model_to_estimator
TF-DF 未实现将已训练/未训练模型转换为估计器格式所需的 API。
加载的模型的行为与 Python 模型不同。
虽然 Keras API 进行了抽象,但在 Python 中实例化的模型(例如,使用 tfdf.keras.RandomForestModel()
)和从磁盘加载的模型(例如,使用 tf_keras.models.load_model()
)的行为可能不同。值得注意的是,Python 实例化的模型会自动应用必要的类型转换。例如,如果将 float64
特征馈送到期望 float32
特征的模型,则会隐式执行此转换。但是,对于从磁盘加载的模型,这种转换是不可能的。因此,训练数据和推理数据始终必须具有完全相同的类型。
Tensorflow 特征名称清理
Tensorflow 会清理特征名称,例如,将其转换为小写。