CLI 和 C++ 用户手册¶
本页面深入介绍了 Yggdrasil Decision Forests (YDF) 的 CLI API。本页面介绍的内容通常不是使用 YDF 所必需的,但它们将帮助用户更好地理解和使用高级选项。
新用户应首先查看快速入门。
此处介绍的大多数概念也适用于其他 API,尤其是 C++ API。
数据集¶
一个数据集是示例的列表。数据集可以存储在内存、磁盘中,或者即时生成。数据集中的示例是有序的,也就是说数据集中的一个示例可以通过其在数据集中的索引来唯一标识。
一个属性(在其他库中也称为特征 (feature)、变量 (variable) 或列 (column))是指表格数据集中的某一个特定信息片段。例如,一个人的年龄、姓名和出生国家都是属性。
每个属性都有一个语义(也称为类型 (type))。语义决定了模型如何使用该属性。例如,年龄(例如,自出生以来的年数)通常是数值型的,而国家(例如,ISO 3166 国家代码)是类别型的。
YDF 支持以下语义:
-
数值型 (NUMERICAL):数值。通常用于具有完整顺序的数量或计数。例如,一个人的年龄,或袋子里的物品数量。可以是浮点数或整数。缺失值用 NaN 表示。
-
类别型 (CATEGORICAL):一个类别值。通常用于具有有限可能值集合且没有顺序的类型/类别。例如,集合 {RED, BLUE, GREEN} 中的颜色 RED。可以是字符串或整数。在内部,类别值存储为 int32,因此应该小于 ~2B。
-
类别集型 (CATEGORICAL_SET):类别值的集合。非常适合表示分词后的文本。与 CATEGORICAL 不同,CATEGORICAL_SET 中的项目数量可以改变,并且每个项目的顺序/索引无关紧要。
-
布尔型 (BOOLEAN):布尔值。类似于 CATEGORICAL,但只有两个可能的值。
-
离散数值型 (DISCRETIZED_NUMERICAL):自动离散化到 bin 中的数值。离散数值特征比(非离散)数值特征训练更快。如果这些特征的唯一值数量少于 bin 的数量,则从模型的角度来看,离散化是无损的。如果此特征的唯一值数量大于 bin 的数量,则从模型的角度来看,离散化是有损的。有损离散化可能会降低,有时甚至提高(由于正则化)模型的质量。
-
哈希型 (HASH):字符串值的哈希。仅当值的相等性重要时(而不是值本身)使用。目前,仅用于排序问题中的组,例如查询/文档问题中的查询。哈希计算使用 farmhash。
一个示例是属性值的集合。以下是一个包含三个属性的示例
"attribute_1": 5.1 # NUMERICAL
"attribute_2": "CAT" # CATEGORICAL stored as string
"attribute_3": [1, 2, 3] # CATEGORICAL-SET stored as integer
一个数据规范(简称 dataspec)是属性列表的定义。此定义包含数据集中每个属性的名称、语义和元数据。dataspec 存储为 ProtoBuffer(参见 dataset/data_spec.proto
中的定义)。可以使用 show_dataspec
CLI 命令以可读方式打印 dataspec。
Google ProtoBuffers 在 YDF 中广泛用于配置。与 XML 或 JSON 一样,Protobuf 是一种独立于语言的序列化格式,用于交换数据。Protobuf 可以采用文本或二进制格式。YDF 配置始终是包含文本格式 protobuf V2 的文件。
protobuf 总是附带一个 Protobuf 定义,其中列出了允许的字段名称和类型。在本文档中,有几个示例包含 Protobuf 文本和指向相应 Protobuf 定义的链接。
以下是一个 protobuf 和相应 protobuf 定义的示例
Protobuf
Protobuf 定义
message MyMessage{
optional int32 field_a = 1 [default = 5];
optional float field_b = 2 [default = 8.0];
}
在定义中,每个字段都被分配一个唯一的整数 ID,形式为 <字段名称> = <字段 ID> [default= <默认值>]
。
这是 Deployment config 的 Protobuf 定义(分布式训练的配置,稍后将解释)
dataspec 示例
Number of records: 1
Number of columns: 3
Number of columns by type:
NUMERICAL: 1 (33%)
CATEGORICAL: 1 (33%)
CATEGORICAL_SET: 1 (33%)
Columns:
NUMERICAL: 6 (40%)
0: "feature_1" NUMERICAL mean:38.5816
CATEGORICAL: 1 (33%)
1: "feature_2" CATEGORICAL has-dict vocab-size:2 zero-ood-items most-frequent:"CAT" 1 (50%)
CATEGORICAL_SET: 1 (33%)
2: "feature_3" CATEGORICAL_SET integerized
Terminology:
nas: Number of non-available (i.e. missing) values.
ood: Out of dictionary.
manually-defined: Attribute which type is manually defined by the user i.e. the type was not automatically inferred.
tokenized: The attribute value is obtained through tokenization.
has-dict: The attribute is attached to a string dictionary e.g. a categorical attribute stored as a string.
vocab-size: Number of unique values.
当存储为原始文件时,可以直接读取 dataspec。以下是上面打印的 dataspec 的原始定义。
columns {
name: "attribute_1"
type: NUMERICAL
numerical {
mean: 10
}
}
columns {
name: "attribute_2"
type: CATEGORICAL
categorical {
items {
key: "CAT"
value { index: 1 }
}
items {
key: "COT"
value { index: 2 }
}
}
}
columns {
name: "attribute_3"
type: CATEGORICAL_SET
categorical_set {
is_already_integerized: true
}
}
dataspecs 已使用 dataspec 推理工具(即 infer_dataspec
)自动创建。如果 dataspec 的某些部分推理不正确,用户可以使用dataspec 指南覆盖它(参见 dataset/data_spec.proto
)。
例如,看起来像整数的值默认被检测为数值型。但是,表示 ENUM 值的整数值更适合作为类别型。以下是一个dataspec 指南示例,它强制所有名称以“enum_”前缀开头的属性被检测为类别型。
column_guides {
column_name_pattern: "^foo.*" # Regular expression
type: CATEGORICAL # Force this semantic.
}
以下两个示例展示了如何使用 CLI 和 C++ API 推理 dataspec
CLI
infer_dataspec --dataset=csv:/my/dataset.csv --output=dataspec.pbtxt
# Human readable description of the dataspec.
show_dataspec --dataspec=dataspec.pbtxt
C++
using namespace yggdrasil_decision_forests;
dataset::proto::DataSpecification data_spec;
dataset::CreateDataSpec("csv:/my/dataset.csv", false, guide, &data_spec);
# Human description of the dataspec.
std::cout << dataset::PrintHumanReadable(data_spec);
数据集路径和格式¶
数据集的格式由数据集文件路径中的前缀和冒号(“:”)指定。例如,csv:/path/to/my/dataset.csv
是指向 csv 文件的数据集路径。
支持的格式有
csv:
: CSV 文件。tfrecord:
: GZIP 压缩的 TensorFlow Record 文件,包含序列化的 TensorFlow Example protobuf。
单个数据集可以分成多个文件。分割数据集可以加快数据集读取速度。一般来说,单个数据集文件不应超过 100MB。数据集的文件列表可以使用分片、通配符和逗号分隔来指定。以下是由多个文件组成的数据集路径示例
csv:/path/to/my/dataset.csv@10
csv:/path/to/my/dataset_*.csv
csv:/path/to/my/dataset_1.csv,/path/to/my/dataset_1.csv
此外,逗号分隔可以与分片/通配符结合使用。例如:csv:/1/data.csv*,/2/data.csv*
。
学习器和模型¶
YDF 使用学习器和模型的概念。学习器是一个函数(数学意义上的),它接受一个数据集并输出一个模型。模型是一个函数,它接受一个示例并输出一个预测。
在模型-学习器抽象中,一个学习算法和一组超参数是一个学习器,而一个训练好的模型是一个模型。
一个模型可以存储在内存或磁盘中。可以使用 show_model 命令显示有关模型的信息(例如输入特征、标签、验证分数、学习器)。
一个模型还包含元数据。元数据不用于计算预测。相反,用户或工具可以查询此元数据进行分析(例如特征重要性、训练损失)。可以使用 edit_model 工具删除模型元数据。
模型可以编译成( serving )引擎。引擎是没有元数据且内部结构经过优化以实现快速推理的模型。虽然模型是平台无关的,但引擎与特定硬件相关(例如需要 GPU 或 AVX512 指令)。引擎推理比标准的模型推理快几个数量级。
C++ 方法 model.BuildFastEngine()
会将模型编译成当前硬件上最高效的引擎。cli/benchmark_inference
工具可以测量模型的推理速度以及兼容的 serving 引擎。
学习器通过 TrainingConfig proto 实例化。TrainingConfig 定义了学习的标签、输入特征、任务、学习器类型和超参数。
通用超参数 (GHP) 是 TrainingConfig protobuf 的替代表示形式。GHP 是一个从字符串到值的映射,适用于快速配置和自动化超参数优化。TensorFlow Decision Forests (TF-DF) 使用 GHP
超参数页面列出了学习器及其超参数。
学习器可以选配部署规范进行配置。 部署规范定义了训练期间使用的计算资源。这包括线程数或 worker 数(在分布式训练的情况下)。更改部署配置(或不提供任何配置)可能会影响训练速度,但不会影响最终模型:使用相同的学习器但不同的部署规范训练的两个模型保证是相同的。
默认情况下,学习器配置为使用 6 个线程在本地训练。
学习器的日志目录是一个可选目录,用于指定学习器导出关于学习过程信息的位置。此信息是学习器特定的,可以包含图表、表格和 HTML 报告,并帮助理解模型。学习器的日志目录没有固定的结构,因为不同的学习器可以导出不同类型的信息。
以下两个示例展示了如何使用 CLI 和 C++ API 训练模型(参见上面关于如何在 dataspec.pbtxt
文件中创建 dataspec 的说明)
CLI
cat <<EOF > hparams.pbtxt
task: CLASSIFICATION
label: "income"
learner: "GRADIENT_BOOSTED_TREES"
EOF
train \
--dataset=csv:/my/dataset.csv \
--dataspec=dataspec.pbtxt \
--config=hparams.pbtxt \
--output=/my/model
# Human description of the model.
show_model --model=dataspec.pbtxt
C++
using namespace yggdrasil_decision_forests;
dataset::proto::DataSpecification data_spec = ... // Previous example.
// Configure the training.
model::proto::TrainingConfig config;
config.set_task(model::proto::CLASSIFICATION);
config.set_label("income");
config.set_learner("GRADIENT_BOOSTED_TREES");
// Instantiate the learner.
std::unique_ptr<model::AbstractLearner> learner;
CHECK_OK(model::GetLearner(config, &learner));
// Train
std::unique_ptr<model::AbstractModel> model = learner->Train("csv:/my/dataset.csv", data_spec);
// Export the model to disk.
CHECK_OK(model::SaveModel("/my/model", model.get()));
// Human description of the model.
std::string description;
model->AppendDescriptionAndStatistics(false, &description);
std::cout << description;
为了最小化二进制文件大小并支持自定义学习算法和模型,模型和学习器依赖于注册机制:用户可以通过依赖注入限制或扩展支持的模型和学习器列表。
所有官方支持的模型和学习器可以分别通过依赖项 yggdrasil_decision_forests/model:all_models
和 yggdrasil_decision_forests/learners:all_learners
进行注入。
元学习器¶
学习器可以组合使用。包含另一个学习器的学习器称为元学习器。这包括超参数优化器学习器、校准器学习器、集成学习器和特征选择学习器。
模型/学习器评估¶
模型评估可通过 evaluate
CLI 命令或 model::AbstractModel::Evaluate
C++ 函数进行。
以下两个示例展示了如何使用 CLI 和 C++ API 评估模型
CLI
C++
using namespace yggdrasil_decision_forests;
std::unique_ptr<model::AbstractModel> model = ... // Previous example.
// Loads the dataset.
dataset::VerticalDataset dataset;
CHECK_OK(LoadVerticalDataset("csv:/my/dataset.csv", model->data_spec(), &dataset));
// Evaluate the model.
utils::RandomEngine rnd;
metric::proto::EvaluationResults evaluation = model->Evaluate(dataset, {}, &rnd);
// Export the evaluation in a human-readable format.
std::string text_report;
metric::AppendTextReport(evaluation, &text_report);
std::cout << text_report;
学习器的评估包括评估由学习器训练的一个或多个模型(例如交叉验证;C++(参见 model::EvaluateLearner))。当数据集较小(例如少于 5 万个示例)或学习器不稳定时,学习器评估比模型评估更准确。
模型分析¶
show_model
CLI 命令显示有关模型的以下信息
- 模型的输入特征和标签。
- 每个特征的变量重要性。
- 模型的详细或概要结构(例如节点数)。
- 兼容的 serving 引擎。
- 训练日志。
或者,可以使用 TensorFlow Decision Forests python inspector 直接以编程方式可视化和分析模型。有关更多详细信息,请参阅 检查和调试 colab。Yggdrasil 模型可以使用 tfdf.keras.core.yggdrasil_model_to_keras_model 函数转换为 Tensorflow Decision Forests 模型。调用 model.summary()
显示的信息与 show_model
CLI 相同。
变量重要性¶
变量重要性可以通过 CLI (show_model
)、C++ API (model.GetVariableImportance()
) 和 Python API (tfdf.inspector.make_inspector(path).variable_importances()
) 获取。
可用的变量重要性包括
模型无关的
MEAN_{INCREASE,DECREASE}_IN_{metric}
:使用置换重要性移除特征后估计的指标变化。根据学习算法和超参数,变量重要性 (VI) 可以通过验证、交叉验证或 OOB(袋外)计算。例如,一个特征的MEAN_DECREASE_IN_ACCURACY
是通过打乱特征值导致的准确率下降(下降越大,特征越重要)。再例如,MEAN_DECREASE_IN_AUC_3_VS_OTHERS
是将标签类别“3”与其余类别进行比较时 AUC 的预期下降。
决策森林特定的
-
SUM_SCORE
:使用特定特征的分割分数的总和。分数越大表示特征越重要。 -
NUM_AS_ROOT
:使用特定特征的根节点数。分数越大表示特征越重要。 -
NUM_NODES
:使用特定特征的节点数。分数越大表示特征越重要。 -
INV_MEAN_MIN_DEPTH
:特征在所有树路径中首次出现的平均最小深度的倒数(即 1/(1+x))。分数越大表示特征越重要。注意::MEAN_MIN_DEPTH
已移除。
请注意,SUM_SCORE
、NUM_AS_ROOT
和 INV_MEAN_MIN_DEPTH
不适用于孤立森林模型,因为它们不提供有用信息。
异常检测特定的
DIFFI
:基于深度的孤立森林特征重要性。由 Carletti 等人提出,参见 https://arxiv.org/abs/2007.11117。MEAN_PARTITION_SCORE
:属性分区分数的平均值。节点的 分区分数衡量分割的平衡程度,其中1-4*x*(1-x)
是正例与总示例的比率。分数越大表示特征越重要。
自动化超参数调优¶
优化学习器的超参数可以提高模型的质量。选择最优超参数可以手动完成(参见如何改进模型),也可以使用自动化超参数优化器 (HPO)。HPO 通过一系列试错计算自动选择最佳超参数。
查看示例目录以获取超参数调优示例。
HPO 是一个元学习器,其键为 HYPERPARAMETER_OPTIMIZER
,配置了要优化的子学习器。它支持本地训练和分布式训练。
可以配置 HPO 的各个方面。主要的配置选项有:
- 搜索空间:要优化的超参数集合。
- 评估协议:如何评估一组超参数,例如自评估、交叉验证。
- 优化器:用于在搜索空间中导航的优化算法。
以下示例显示了梯度提升树模型的超参数优化器的 TrainingConfig 配置。
task: CLASSIFICATION
learner: "HYPERPARAMETER_OPTIMIZER"
label: "income"
[yggdrasil_decision_forests.model.hyperparameters_optimizer_v2.proto
.hyperparameters_optimizer_config] {
retrain_final_model: true # Retraining the model after tuning.
optimizer {
# New hyperparameters values are generated randomly.
optimizer_key: "RANDOM"
[yggdrasil_decision_forests.model.hyperparameters_optimizer_v2.proto
.random] {
num_trials: 25 # 25 Random trials.
}
}
# The base learner to optimize.
base_learner {
# Note: There is no need to configure the label and input features of the
# base learner. The values are automatically copied from the HPO
# configuration.
learner: "GRADIENT_BOOSTED_TREES"
[yggdrasil_decision_forests.model.gradient_boosted_trees.proto
.gradient_boosted_trees_config] {
# The number of trees is fixed.
num_trees: 100
}
}
base_learner_deployment {
# Each candidate learner runs on a single thread.
num_threads: 1
}
# List of hyper-parameters to optimize.
search_space {
fields {
name: "num_candidate_attributes_ratio"
discrete_candidates {
possible_values { real: 1.0 }
possible_values { real: 0.8 }
possible_values { real: 0.6 }
}
}
fields {
name: "use_hessian_gain"
discrete_candidates {
possible_values { categorical: "true" }
possible_values { categorical: "false" }
}
}
fields {
name: "growing_strategy"
discrete_candidates {
possible_values { categorical: "LOCAL" }
possible_values { categorical: "BEST_FIRST_GLOBAL" }
}
children {
parent_discrete_values {
possible_values { categorical: "LOCAL" }
}
name: "max_depth"
discrete_candidates {
possible_values { integer: 4 }
possible_values { integer: 5 }
possible_values { integer: 6 }
possible_values { integer: 7 }
}
}
children {
parent_discrete_values {
possible_values { categorical: "BEST_FIRST_GLOBAL" }
}
name: "max_num_nodes"
discrete_candidates {
possible_values { integer: 16 }
possible_values { integer: 32 }
possible_values { integer: 64 }
possible_values { integer: 128 }
}
}
}
}
}
分布式训练¶
分布式训练是指在多台计算机上训练模型。分布式训练对于大型数据集(例如,大于 1000 万个示例)或昂贵的学习算法(例如,超参数调优)尤其有价值。
使用分布式训练时,执行“训练”操作的进程(即运行 learner->Train()
函数的程序,或运行 train
CLI 命令的进程)成为管理器。剩余的工作由 worker 执行。worker 是 worker 二进制文件的实例。
并非所有学习器都支持分布式训练。例如,GRADIENT_BOOTED_TREES
学习器不支持分布式训练,但是,DISTRIBUTED_GRADIENT_BOOSTED_TREES
支持。一些学习器(例如,HYPERPARAMETER_OPTIMIZER
)支持分布式训练和非分布式训练。
以下学习器支持分布式训练
-
DISTRIBUTED_GRADIENT_BOOSTED_TREES
:梯度提升树模型的精确分布式训练。 -
HYPERPARAMETER_OPTIMIZER
:模型超参数的自动优化。
在大型数据集上训练时,建议将数据集分割成多个文件。有关更多详细信息,请参阅数据集路径和格式部分。
以下是使用 DISTRIBUTED_GRADIENT_BOOSTED_TREES
算法进行分布式训练的示例。
训练数据集是位于远程目录 /remote/dataset/
中的一组 csv 文件。例如
ls /remote/dataset/
> /remote/dataset/train_0.csv
> /remote/dataset/train_1.csv
> /remote/dataset/train_2.csv
...
> /remote/dataset/train_1000.csv
因此,数据集路径是 csv:/remote/dataset/train_*.csv
。
重要的是,对于 DISTRIBUTED_GRADIENT_BOOSTED_TREES 算法(不同的算法有不同的约束),所有 worker 都应该能够访问此数据集。
训练配置为
train_config.pbtxt
learner: "DISTRIBUTED_GRADIENT_BOOSTED_TREES"
task: CLASSIFICATION
label: "income"
[yggdrasil_decision_forests.model.distributed_gradient_boosted_trees.proto
.distributed_gradient_boosted_trees_config] {
}
通过配置分布式执行引擎 (DEE) 并在 DeploymentConfig 中设置 cache_path
字段来启用分布式训练。DEE 定义了 worker 的数量以及如何访问它们(例如,IP 地址列表)。
以下是为分布式训练配置的 DeploymentConfig 示例
deploy_config.pbtxt
# The work_directory is a remote directory accessible to all workers.
cache_path: "/remote/work_directory"
num_threads: 8 # Each worker will run 8 threads.
try_resume_training: true # Allow training to be interrupted and resumed.
distribute {
implementation_key: "GRPC"
[yggdrasil_decision_forests.distribute.proto.grpc] {
socket_addresses {
# Configure the 3 workers.
addresses { ip: "192.168.0.10" port: 8123 }
addresses { ip: "192.168.0.11" port: 8123 }
addresses { ip: "192.168.0.12" port: 8123 }
}
}
}
在开始分布式训练之前,您需要启动 worker。在此示例中,我们配置了 3 个 worker 在三台不同的计算机上运行。在每台计算机上,我们需要使用相应的端口启动一个 worker 进程。例如
# Connect with ssh to 192.168.0.10, and then run:
# Download and extract the worker binary.
wget https://github.com/google/yggdrasil-decision-forests/releases/download/1.0.0/cli_linux.zip
unzip cli_linux.zip
# Start the worker
./grpc_worker_main --port=8123
有关更多详细信息,请参阅 yggdrasil_decision_forests/utils/distribute/implementations/grpc/grpc.proto。
worker 启动后,可以在管理器上启动训练
# On the manager.
# Check that all the configuration files are available
ls
> train_config.pbtxt
> deploy_config.pbtxt
# Determine the dataspec of the dataset
# See the "Create dataspec" section in the "CLI / Quick Start" for more details.
./infer_dataspec \
--dataset=csv:/remote/dataset/train_*.csv \
--output=dataspec.pbtxt
# Start the distributed training.
./train \
--dataset=csv:/remote/dataset/train_*.csv \
--dataspec=dataspec.pbtxt \
--config=train_config.pbtxt\
--deployment=deploy_config.pbtxt\
--output=model
此示例通过在同一台机器上运行所有 worker 来演示分布式训练。这实际上不是分布式训练,但这是一个简单的测试方法。
上面的示例使用了 GRPC
DEE。不同的 DEE 决定了分布式计算原语如何执行。DEE 的选择不影响实际训练的模型。
例如,TensorFlow Decision Forests 使用 [TF_DIST]](https://github.com/tensorflow/decision-forests/blob/main/tensorflow_decision_forests/tensorflow/distribute/tf_distribution.proto) DEE,它可以运行 TensorFlow Parameter Servers 的分布式计算。TF_DIST DEE 支持 socket 地址以及 TF_CONFIG 配置
对于 CLI 或 C++ API,推荐使用 GRPC 分布式引擎。使用 TensorFlow Decision Forests 接口时,GRPC 和 TF_DIST 都是可行的选项(各有优缺点)。
特征工程¶
改进特征对于模型质量很重要。为了简单(YDF 只做一件事)和执行效率(直接代码执行通常比中间表示执行快得多),YDF 核心库不包含可定制的处理组件,文本分词除外。
注册类¶
Yggdrasil decision forest 的源代码分为模块。不同的模块实现不同的功能,例如学习算法、模型、数据集格式支持等。
模块通过 Bazel 依赖规则由注册机制控制:要启用一个模块,应将此模块的依赖项添加到代码的任何 cc_library
或 cc_binary
中。请注意,添加模块也会增加二进制文件的大小。
为了简单起见,yggdrasil_decision_forests/cli
中的 CLI 工具是用所有可用模块编译的。
使用 C++ API 时,应手动添加模块依赖项。例如,为了支持 RANDOM_FOREST
模型的训练,二进制文件/库需要依赖于 "yggdrasil_decision_forests/learner/random_forest" 规则。
类型为“No class registered with key...”或“Unknown item ... in class pool”的错误表明缺少所需模块的依赖项。
Yggdrasil decision forest 还定义了包含特定类型所有模块的模块组。例如,规则 yggdrasil_decision_forests/learner:all_learners
注入所有可用的学习算法(包括上面提到的 :random_forest
)。
以下是可用的模块路径和注册键列表。
学习算法
- learner/cart CART
- learner/distributed_gradient_boosted_trees DISTRIBUTED_GRADIENT_BOOSTED_TREES
- learner/gradient_boosted_trees GRADIENT_BOOSTED_TREES
- learner/random_forest RANDOM_FOREST
- learner/hyperparameters_optimizer HYPERPARAMETER_OPTIMIZER
模型
- model/gradient_boosted_trees GRADIENT_BOOSTED_TREES
- model/random_forest RANDOM_FOREST
推理引擎
- serving/decision_forest:register_engines
数据集 I/O
- dataset:csv_example_reader FORMAT_CSV (仅读取)
- dataset:csv_example_writer FORMAT_CSV (仅写入)
- dataset:tf_example_io_tfrecord FORMAT_TFE_TFRECORD
- dataset:capacitor_example_reader FORMAT_CAPACITOR
- dataset:tf_example_io_recordio FORMAT_TFE_RECORDIO
- dataset:tf_example_io_sstable FORMAT_TFE_SSTABLE
分布式计算后端
- utils/distribute/implementations/multi_thread MULTI_THREAD
- utils/distribute/implementations/grpc GRPC
- tensorflow_decision_forests/tensorflow/distribute:tf_distribution TF_DIST
梯度提升树学习器的损失函数
- learner/gradient_boosted_trees/loss/loss_imp_*
高级特性¶
大多数 YDF 高级文档编写在 .h
头文件(用于库)和 .cc
头文件(用于 CLI 工具)中。~~~