Estimators(估计量)

估计

本文档介绍了Estimators ——一种高度简化机器学习编程的 TensorFlow API。估算人员采取以下行动:

  • 训练

您可以使用我们提供的预先制作的估算器或编写您自己的定制估算器。所有估算器 - 无论是预制还是定制 - 都是基于tf.estimator.Estimator类的类。

注意: TensorFlow 还包含一个不应使用的弃用Estimatortf.contrib.learn.Estimator

估算器的优点

估算人员提供以下好处:

  • 您可以在本地主机上或分布式多服务器环境中运行基于估算器的模型,而无需更改模型。此外,您可以 在CPU,GPU 或 TPU 上运行基于估算器的模型,而无需重新编码模型。

使用 Estimators 编写应用程序时,必须将数据输入管道与模型分开。这种分离简化了不同数据集的实验。

预制估算器

预制估算器使您能够在比基本 TensorFlow API 更高的概念层面上工作。由于 Estimators 为您处理所有“管道”,您不必再担心创建计算图表或会话。也就是说,预先制作估计创建和管理Graph,并Session为你的对象。此外,预制的Estimators让您只需进行最少量的代码更改就可以体验不同的模型架构。DNNClassifier例如,它是一个预先制作的 Estimator 类,它通过密集的前馈神经网络来训练分类模型。

一个预先制定的估计者计划的结构

依赖预先制作的估算器的 TensorFlow 程序通常由以下四个步骤组成:

  • 编写一个或多个数据集导入功能。例如,您可以创建一个函数来导入训练集,并创建另一个函数来导入测试集。每个数据集导入函数都必须返回两个对象:

- a dictionary in which the keys are feature names and the values are Tensors (or SparseTensors) containing the corresponding feature data - a Tensor containing one or more labels

例如,下面的代码演示了输入函数的基本框架:

def input_fn(dataset):...#操作数据集,提取要素名称和标签返回 feature_dict,label

(有关完整的详细信息,请参阅导入数据。)

  • 定义特征列。每个tf.feature_column标识一个功能名称,其类型和任何输入预处理。例如,以下片段创建三个保存整数或浮点数据的特征列。前两个特征列只是标识特征的名称和类型。第三个特性列还指定了 lambda 程序将调用的用于缩放原始数据:Define three numeric feature columns. population = tf.feature_column.numeric_column('population') crime_rate = tf.feature_column.numeric_column('crime_rate') median_education = tf.feature_column.numeric_column('median_education', normalizer_fn='lambda x: x - global_education_mean')global_education_mean')

预制估算器的好处

预先制定的估算器编码最佳实践,提供以下好处:

  • 确定计算图的不同部分应在哪里运行的最佳实践,在单台计算机或群集上实施策略。

如果您不使用预先制定的估算器,则必须自己实施上述功能。

自定义估算器

每个估算器的核心 - 无论是预制还是定制 - 都是它的模型函数,它是一种为训练,评估和预测构建图形的方法。当您使用预先制作的估算器时,其他人已经实施了该模型功能。当依靠自定义估算器时,您必须自己编写模型函数。伴随文档解释了如何编写模型函数

推荐工作流程

我们推荐以下工作流程:

  • 假设存在合适的预制估算器,请使用它构建第一个模型并使用其结果建立基线。

从 Keras 模型创建估计器

您可以将现有的 Keras 模型转换为 Estimators。这样做可以让您的 Keras 模型访问 Estimator 的优势,例如分布式培训。请tf.keras.estimator.model_to_estimator按以下示例进行调用:

# Instantiate a Keras inception v3 model. keras_inception_v3 = tf.keras.applications.inception_v3.InceptionV3(weights=None) # Compile model with the optimizer, loss, and metrics you'd like to train with. keras_inception_v3.compile(optimizer=tf.keras.optimizers.SGD(lr=0.0001, momentum=0.9), loss='categorical_crossentropy', metric='accuracy') # Create an Estimator from the compiled Keras model. est_inception_v3 = tf.keras.estimator.model_to_estimator(keras_model=keras_inception_v3) # Treat the derived Estimator as you would any other Estimator. For example, # the following derived Estimator calls the train method: est_inception_v3.train(input_fn=my_training_set, steps=2000)

有关更多详细信息,请参阅tf.keras.estimator.model_to_estimator的文档。