估计量的基础
警告!
TensorFlow Estimators在很长一段时间内没有收到TensorFlow团队的更新,因此不再推荐它。使用时可能会发现bug
tfestimators
使用TensorFlow的最新版本(>= 1.10)。
概述
TensorFlow Estimators API的基本组件包括:
罐装估计器(各种模型的预构建实现)。
自定义估计器(自定义模型实现)。
估计器方法(核心方法,如
培训()
,预测()
,evaluate ()
等等,它们对所有罐装和自定义评估器的工作是一样的)。特征列(关于在建模过程中应该如何转换特征的定义)。
输入函数(用于训练、评估和预测的数据来源)。
此外,还有一些api涵盖了更高级的用法:
实验(围绕处理诸如分布式训练、超参数调优等问题的估计器的包装器)
运行钩子(用于记录上下文和与每个建模流程交互的回调)
SavedModel导出实用程序(导出经过训练的模型,以便部署到CloudML等地方)
请阅读我们的白皮书如果您对上述部件的详细设计感兴趣。
下面我们将列举这些组件中的一些核心功能,以提供可用功能的高级概述。有关一起使用所有组件的详细信息,请参阅链接的文章。
估计罐头
的tfestimators包包含了用于常见机器学习任务的各种罐装估计器。目前,以下罐装估计器可用:
估计量 | 描述 |
---|---|
linear_regressor () |
线性回归量模型。 |
linear_classifier () |
线性分类器模型。 |
dnn_regressor () |
款回归。 |
dnn_classifier () |
款分类。 |
dnn_linear_combined_regressor () |
线性组合回归。 |
dnn_linear_combined_classifier () |
线性组合分类。 |
在使用估计器之前,您需要提供一个输入函数并定义一组特征列。下面两个部分将介绍如何做到这一点。
输入功能
输入函数用于在训练、评估和预测过程中为估计者提供数据。R接口为各种通用R数据源提供了几个高级输入函数实现,包括:
- 公式
- 矩阵
- 数据帧
- 向量的列表
例如,这是我们如何构造一个输入函数使用mtcars
数据帧作为数据源,处理见鬼
,英里/加仑
,我
变量作为特征列,和vs
作为一个反应。
输入< -input_fn(mtcars特点=c(“诅咒”,“英里”,“我”),响应=“与”,batch_size =128,时代=3.)
在这种情况下,公式界面更简洁一些,对于有过使用R拟合模型经验的R用户来说应该很熟悉统计数据
包中。
还可以编写完全自定义的输入函数,从任意数据源提取数据。看到输入功能文章了解更多细节。
功能列
在TensorFlow中,特征列用于指定特定模型可能预期的输入的“形状”或“类型”。例如,在下面的代码中,我们定义了两个简单的特征列:一个数字列称为“诅咒”
,一个指示符列称为“我”
在一个炎热的表示。
有各种各样的功能列可用:
方法 | 描述 |
---|---|
column_indicator () |
表示给定类别列的多热表示。 |
column_numeric () |
表示实值或数值特征。 |
column_embedding () |
创建从稀疏分类输入转换而来的密集列。 |
column_bucketized () |
表示离散密集输入。 |
column_categorical_weighted () |
将权重值应用于类别列。 |
column_categorical_with_vocabulary_list () |
创建具有内存词汇表的类别列。 |
column_categorical_with_vocabulary_file () |
使用词汇表文件创建类别列。 |
column_categorical_with_identity () |
创建返回标识值的类别列。 |
column_categorical_with_hash_bucket () |
表示稀疏特征,其中id由散列设置。 |
请参阅有关功能列额外的细节。
创建一个估计量
下面是一个创建DNN线性组合屏蔽估计器的示例。在创建估计器时,我们传递特征列和指定模型层和体系结构的其他参数。注意,这个特定的估计器使用两组特征列—一组用于构造线性层,另一组用于完全连接的深层。
#构建特征栏linear_feature_columns < -feature_columns(column_numeric(“英里”))dnn_feature_columns < -feature_columns(column_numeric(“诅咒”))#生成分类器分类器< -dnn_linear_combined_classifier(linear_feature_columns =linear_feature_columns,dnn_feature_columns =dnn_feature_columns,dnn_hidden_units =c(3.,3.),dnn_optimizer =“Adagrad”)
训练和预测
然后用户可以调用培训()
对初始化的Estimator进行若干步骤的训练:
一旦训练好模型,用户就可以使用了预测()
它对表示推理数据源的给定输入函数进行预测。
预测< -预测(分类器,input_fn =输入)
用户还可以将密钥传递给predict_keys
论点预测()
这就产生了不同类型的预测,比如使用概率“概率”
:
预测< -预测(分类器,input_fn =输入,predict_keys =“概率”)
或物流:
预测< -预测(分类器,input_fn =输入,predict_keys =“物流”)
您可以通过打印找到所有可用的密钥prediction_keys ()
.然而,并非所有键都可以由不同类型的估计器使用。例如,回归器不能使用“概率”
作为关键之一,因为概率输出只对分类模型有意义。
模型的持久性
创建的模型tfestimators
被持久化到磁盘上。为了获得模型工件存储的位置,我们可以调用model_dir ()
:
然后通过将目录传递给model_dir
参数,并使用它进行预测或继续训练:
图书馆(tfestimators)linear_feature_columns < -feature_columns(column_numeric(“英里”))dnn_feature_columns < -feature_columns(column_numeric(“诅咒”))loaded_model < -dnn_linear_combined_classifier(linear_feature_columns =linear_feature_columns,dnn_feature_columns =dnn_feature_columns,dnn_hidden_units =c(3.,3.),dnn_optimizer =“Adagrad”,model_dir =saved_model_dir)loaded_model
泛型方法
有许多评估器方法可以通用地用于任何罐装或自定义评估器:
方法 | 描述 |
---|---|
培训() |
训练给定训练数据input_fn的模型。 |
预测() |
返回对给定特性的预测。 |
evaluate () |
对给定的评估数据input_fn的模型求值。 |
train_and_evaluate () |
训练和评估本地和分布式配置的模型。 |
export_savedmodel () |
将推理图作为SavedModel导出到给定的目录。 |