参考文章:评估器 tf.estimator

文章目录

  • 评估器
    • 使用评估器的优势
    • 预定义的评估器
      • 预定义评估器的程序结构
      • 预定义评估器的好处
    • 自定义评估器
    • 推荐的工作流
    • 从 Keras 模块中创建评估器

评估器

tf.estimator

  • 训练
  • 评估
  • 预测
  • 作为服务导出

tf.estimator.Estimator

tf.contrib.learn.Estimator

使用评估器的优势

评估器可以为我们带来以下几点好处:

  • 基于评估器的模型可以运行在单机上,也可以运行在分布式的多台服务器环境上并且不需要做任何修改。更棒的是,你还可以将基于评估器的模型运行在 CPUs,GPUs 或者 TPUs 上。
  • 评估器简化了模型开发人员内部共享的实现。
  • 你可以用高级的直观的代码编写某种状态的艺术模型。简而言之,使用评估器通常会比使用 TensorFlow 的低级 API 更加简捷。
  • 评估器是建立在 tf.layers 上的,简化了自定义的内容。
  • 评估器已经为你构建了图表。换句话说,你不需要构建图表了。
  • 评估器提供了一个安全的分布式训练的循环,能够控制以下操作的运行时间和运行方式:
    1、创建图表
    2、初始化变量
    3、启动队列
    4、处理异常
    5、创建校验文件和错误恢复
    6、储存给 TensorBoard 展示的数据

当你用评估器写应用时,你必须将数据输入管道和模型分开。这种分离简化了不同数据集的实验。

预定义的评估器

tf.estimator.DNNClassifier

预定义评估器的程序结构

基于预定义评估器的程序一般包含下面四步:

  1. 编写一个或多个数据集的导入函数。举个例子,你可能会创建两个函数,一个用于导入训练数据,另一个用于导入测试数据。每一个数据集的导入函数都会返回下面两个对象:
    1)一个字典,它的 key 是特征名,而 values 是对应的张量(或者是稀疏张量),张量里面包含了对应的特征数据。
    2)一个张量,它包含了一个或多个标签。
    举个例子,下面的代码是一个输入函数的基本框架:
def input_fn(dataset):... # 操作数据集,提取特征名称和标签return feature_dict, label

数据导入

  1. tf.feature_column
 # 定义三个数值类型的特征列
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')
  1. 实例化相关的预定义评估器。举个例子,下面有一个 LinearClassifier 评估器的实例化的代码:
estimator = tf.estimator.Estimator.LinearClassifier(feature_columns=[population, crime_rate, median_education], )
  1. 调用训练,评估和推断的方法。
    譬如说,所有的评估器都提供了 train 方法,它可以用来训练模型。
# my_training_set 是在第一步中创建的函数
estimator.train(input_fn=my_training_set, steps=2000)

预定义评估器的好处

预定义评估器是编码的最佳实践,它有下面两点好处:

  • 单机或者集群上运行时,计算图的哪部分应该在哪里运行和其实现策略的最佳实践。
  • 事件记录和通用内容摘要的最佳实践。

如果你不使用预定义的评估器,那么你需要自己实现上面所说到的功能。

自定义评估器

创建定制化 Estimator

推荐的工作流

我们推荐的工作流程(workflow)如下:

  1. 假设存在一个合适的评估器,使用它来构建你的第一个模型,并以这个模型的结果作为基准。
  2. 使用当前的预定义评估器构建、测试你所有的管道,包括数据的完整性和可靠性。
  3. 如果存在可选的预定义评估器,可以对这几个评估器做实验,从中选择一个能够产生最好结果的评估器。
  4. 或许,可以通过构建你自己的评估器来进一步提升模型的效果。

从 Keras 模块中创建评估器

tf.keras.estimator.model_to_estimator

# 实例化一个 kera inception v3 模型。
keras_inception_v3 = tf.keras.applications.inception_v3.InceptionV3(weights=None)
# 定义好用来训练模型使用的优化器,损失和评价指标,然后再编译它
keras_inception_v3.compile(optimizer=tf.keras.optimizers.SGD(lr=0.0001, momentum=0.9),loss='categorical_crossentropy',metric='accuracy')
# 从已编译的 Keras 模型中创建一个评估器,注意,keras 模型的初始状态会被保存在这个评估器中。
est_inception_v3 = tf.keras.estimator.model_to_estimator(keras_model=keras_inception_v3)# Treat the derived Estimator as you would with any other Estimator.
# First, recover the input name(s) of Keras model, so we can use them as the
# feature column name(s) of the Estimator input function:
# 像处理其他评估器一样处理派生评估器。
# 首先,恢复 Keras 模型的输入名称,这样就可以将它们当做评估器数去函数的特征列名:
keras_inception_v3.input_names  # print out: ['input_1']
# 一旦有了输入名称,就可以创建输入函数,例如,对于 numpy ndarray 格式的输入:
train_input_fn = tf.estimator.inputs.numpy_input_fn(x={"input_1": train_data},y=train_labels,num_epochs=1,shuffle=False)
# 需要进行训练时,调用评估器的训练函数:
est_inception_v3.train(input_fn=train_input_fn, steps=2000)

注意,Keras 评估器的特征列和标签的名称来自相应的已编译 Keras 模型。例如上面的 train_input_fn 的输入键值可以从 keras_inception_v3.input_names 获取,类似地,预测的输出名称可以从 keras_inception_v3.output_names 获得。

tf.keras.estimator.model_to_estimator

tensorflow教程 开发者指南——评估器 estimator(tensorflow官方推荐使用的编程API)相关推荐

  1. TensorFlow 教程 --进阶指南--3.6增加一个新 Op

    预备知识: 对 C++ 有一定了解. 已经下载 TensorFlow 源代码并有能力编译它. 如果现有的库没有涵盖你想要的操作, 你可以自己定制一个. 为了使定制的 Op 能够兼容原有的库 , 你必须 ...

  2. TensorFlow 教程 --进阶指南--3.3可视化学习

    TensorBoard:可视化学习 TensorBoard 涉及到的运算,通常是在训练庞大的深度神经网络中出现的复杂而又难以理解的运算. 为了更方便 TensorFlow 程序的理解.调试与优化,我们 ...

  3. TensorFlow 教程 --进阶指南--3.4数据读取

    数据读取 TensorFlow程序读取数据一共有3种方法: 供给数据(Feeding): 在TensorFlow程序运行的每一步, 让Python代码来供给数据. 从文件读取数据: 在TensorFl ...

  4. TensorFlow 教程 --进阶指南--3.10共享变量

    你可以在怎么使用变量中所描述的方式来创建,初始化,保存及加载单一的变量.但是当创建复杂的模块时,通常你需要共享大量变量集并且如果你还想在同一个地方初始化这所有的变量,我们又该怎么做呢.本教程就是演示如 ...

  5. TensorFlow 教程 --进阶指南--3.1总览

    综述 Overview Variables: 创建,初始化,保存,和恢复 TensorFlow Variables 是内存中的容纳 tensor 的缓存.这一小节介绍了用它们在模型训练时(during ...

  6. TensorFlow 教程 --进阶指南--3.7自定义数据读取

    基本要求: 熟悉 C++ 编程. 确保下载 TensorFlow 源文件, 并可编译使用. 我们将支持文件格式的任务分成两部分: 文件格式: 我们使用 Reader Op来从文件中读取一个 recor ...

  7. TensorFlow 教程 --进阶指南--3.9TensorBoard: 图表可视化

    TensorFlow 图表计算强大而又复杂,图表可视化在理解和调试时显得非常有帮助. 下面是一个运作时的可式化例子. "一个TensorFlow图表的可视化") 一个TensorF ...

  8. TensorFlow 教程 --进阶指南--3.8使用GPU

    支持的设备 在一套标准的系统上通常有多个计算设备. TensorFlow 支持 CPU 和 GPU 这两种设备. 我们用指定字符串strings 来标识这些设备. 比如: "/cpu:0&q ...

  9. TensorFlow 教程 --进阶指南--3.5线程和队列

    在使用TensorFlow进行异步计算时,队列是一种强大的机制. 正如TensorFlow中的其他组件一样,队列就是TensorFlow图中的节点.这是一种有状态的节点,就像变量一样:其他节点可以修改 ...

最新文章

  1. Java字符串拼接的五种方法,哪种性能最好?
  2. 你做过的项目会逐渐形成你自己的认知和别人对于你的看法~剑桥工程硕士陶瓷有感
  3. 蠢货别忘(一)common lisp funcall
  4. OpenCV与图像处理学习十三——Harris角点检测(含代码)
  5. 微赞企动协会wac_xiehui3.0.9全开源版模块
  6. 【玩转Golang】 自定义json序列化对象时,非法字符错误原因
  7. 人跟人的格局真的是不一样的
  8. Linux下nginx的安装及部署
  9. 2018-2019-1 20165307 20165327 20165332 实验二 固件程序设计
  10. 切身体验的优秀时间管理法——番茄时间工作法!
  11. 一次性密码本(绝对无法破译)
  12. mic in和line in
  13. 【4月电视剧网络关注度榜】《小舍得》登顶4月电视剧热度榜
  14. mysql pdo 端口_链接Mysql的api mysqli和pdo
  15. HTML文件里开头的!Doctype有什么作用?
  16. 【学习】蓝桥杯嵌入式--按键输入
  17. HTTP、HTTPS
  18. 高中计算机教室标语,高中班级教室励志标语
  19. 培训演讲的小技巧,你知道多少?
  20. 步进电机替换伺服电机如何计算?

热门文章

  1. 创建安全 Windows CE 设备(转)
  2. 为ListBox添加水平滚动条
  3. SET_TABLE_FOR_FIRST_DISPLAY 参数 I_SAVE
  4. SAP后台执行大数据量报表(鹦鹉学舌篇)
  5. sap中Excel的模版上传和下载
  6. F4IF_INT_TABLE_VALUE_REQUEST如何返回多于一个列
  7. Windows基础题目
  8. 买走5355.5万张床垫的年轻人,实现“深睡自由”了吗?
  9. 突破冰箱局限!海尔智家AWE发布美食物联生态平台
  10. 维密求变,“自救”还是“挖坟”?