这篇文章介绍tf.estimator,一个高级TensorFlow API,可以极大简化机器学习编程。Estimators封装了下面几个活动。

  • 训练
  • 评估
  • 预测
  • 出口服务(export for serving)

可以使用tensorflow中自带的Estimators,也可以自定义Estimators。所有的Estimators,都继承自tf.estimator.Estimator类。

1. Estimators的优点

  • 可以在分布式多服务器环境下,无需修改代码运行基于Estimator的模型。可以运行Estimator-based模型在CPUs,GPUs, TPUs,无需重新编码模型。
  • 简化了模型开发者间的共享实现。
  • 开发高级的直观的代码。比使用低级API容易。
  • Estimators建立在tf.keras.layers,简化了自定义。
  • Estimators为你建立图
  • Estimators提供一个安全的分布式训练循环,控制如何和何时 1)建立图  2)初始变量  3)加载数据  4)处理异常  5)生成检查点文件和从错误中恢复   6)保存TensorBoard需要的summaries

当使用Estimators时,必须将数据输入管道和模型分开。这种分离简化了不同数据集上的实验。

2.  Pre-made Estimators

pre-made Estimators生成和管理tf.graph和tf.Session。并且只需要作出很小的代码改动,就能实验各种模型结构。下面以一个基于全链接,前馈神经网络训练分类模型为例。

pre-made Estimators 程序的结构

包含下面四个步骤:

1.     写一个或多个数据集导入函数。你肯呢个会生成一个函数用来导入训练集,另一个函数导入测试集。每个数据集导入函数必须包含两个对象:1)一个字典,keys是特征名,values是Tensors(或 Sparse Tensors)包含对应的特征数据。2)一个Tensor,包含一个或多个标签

代码的基本骨架如下:

def input_fn(dataset):
... # manipulate dataset, extracting the feature dict and the label
return feature_dict, label

2.定义特征列。每个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)

3.实例化相关pre-made Estimator.

# Instantiate an estimator, passing the feature columns.
estimator = tf.estimator.LinearClassifier(
feature_columns=[population, crime_rate, median_education],
)

4.调用训练,评估,或预测方法。

# my_training_set is the function created in Step 1
estimator.train(input_fn=my_training_set, steps=2000)

3. 自定义Estimators

无论是pre-made还是自定义Estimators,核心都是模型函数(建立图,用于训练,评估和预测),pre-made Estimators已经实现了这些。自定义Estimators需要自己实现。

推荐工作流

1.假设一个合适的pre-made Estimator存在,使用它建立你的地一个模型,使用结果建立baseline.

2.建立和测试你的整个管道,包括使用pre-made Estimator的整个代码的完整性和可靠性。

3.如果合适的可供替代的pre-made Estimators存在,运行实验,决定哪个pre-made Estimator产生最好的结果。

4.改善你的代码,建立自己的自定义Estimator.

4.  从Keras模型中生成Estimators

可以将存在的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. Note the initial model
# state of the keras model is preserved in the created Estimator.
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_inception_v3.input_names # print out: ['input_1']
# Once we have the input name(s), we can create the input function, for example,
# for input(s) in the format of numpy ndarray:
train_input_fn = tf.estimator.inputs.numpy_input_fn(
x={"input_1": train_data},
y=train_labels,
num_epochs=1,
shuffle=False)
# To train, we call Estimator's train function:
est_inception_v3.train(input_fn=train_input_fn, steps=2000)

Tensorflow Estimators的更多相关文章

  1. Convolutional Neural Network in TensorFlow

    翻译自Build a Convolutional Neural Network using Estimators TensorFlow的layer模块提供了一个轻松构建神经网络的高端API,它提供了创 ...

  2. Awesome TensorFlow

    Awesome TensorFlow  A curated list of awesome TensorFlow experiments, libraries, and projects. Inspi ...

  3. [TensorFlow] Creating Custom Estimators in TensorFlow

    Welcome to Part 3 of a blog series that introduces TensorFlow Datasets and Estimators. Part 1 focuse ...

  4. [TensorFlow] Introduction to TensorFlow Datasets and Estimators

    Datasets and Estimators are two key TensorFlow features you should use: Datasets: The best practice ...

  5. TensorFlow框架(5)之机器学习实践

    1. Iris data set Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理.Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集.数据集包含150个数据集,分为3类, ...

  6. TensorFlow 中文资源全集,官方网站,安装教程,入门教程,实战项目,学习路径。

    Awesome-TensorFlow-Chinese TensorFlow 中文资源全集,学习路径推荐: 官方网站,初步了解. 安装教程,安装之后跑起来. 入门教程,简单的模型学习和运行. 实战项目, ...

  7. TensorFlow tutorial

    代码示例来自https://github.com/aymericdamien/TensorFlow-Examples tensorflow先定义运算图,在run的时候才会进行真正的运算. run之前需 ...

  8. TensorFlow.org教程笔记(一)Tensorflow初上手

    本文同时也发布在自建博客地址. 本文翻译自www.tensorflow.org的英文教程. 本文档介绍了TensorFlow编程环境,并向您展示了如何使用Tensorflow解决鸢尾花分类问题. 先决 ...

  9. tensorflow estimator API小栗子

    TensorFlow的高级机器学习API(tf.estimator)可以轻松配置,训练和评估各种机器学习模型. 在本教程中,您将使用tf.estimator构建一个神经网络分类器,并在Iris数据集上 ...

随机推荐

  1. python 解决粘包问题

    客户端发送hello,如果服务端 recv(1) ,那只能接收到 h 这一个字符,然后再recv(1) 一下,可以再接收一个 e , 因为客户端发送的结果长,所以只能把其他的先缓存下来,下次recv的 ...

  2. Python基础—07-函数使用(01)

    #函数使用 零碎知识 灵活的if-else a = 3 if False else 5 # 等价于 if False: a = 3 else: a = 5 灵活的and/or # 当前面为真,才会进行 ...

  3. React中需要多个倒计时的问题

    最近有一个需求是做一个闪购列表,列表中每一个商品都有倒计时,如果每一个倒计时都去生成一个setTimeout的话,一个页面就会有很多定时器,感觉这种做法不是非常好,于是换了一个思路. 思路是这样的,一 ...

  4. js对URL的相关操作集锦

    1.location.href..... (1)self.loction.href="/url" window.location.href="/url"    ...

  5. 关于Vue-cli 跨域,即使是非自己的服务器也可以get到内容

    刚入门vue ,打算用vue的脚手架做一个小项目.需要用到第三方的api,无奈遇到各种各样的问题. 比如 Access-Control-Allow-Origin ,或者使用了ajax的jsonp模式之 ...

  6. 大数据开发从入门小白到删库跑路(一)- 获取Hadoop

    Hadoop是一个可以通过相对简单编程模型实现跨多台计算机集群分布式处理大型数据集的框架.它不是依赖于高额成本的硬件可靠性来提供高可用性,Hadoop的设计能从单个服务器扩展到数千台机器,每个机器提供 ...

  7. vue入门——组件基础todolist

    1. 以下是 todolist 的例子,没有用到组件:下面的3 会通过组件拆分todolist <!DOCTYPE html> <html lang="en"&g ...

  8. 【基于不同设备厂商在处理vlan之间通信配置例子】

    H3C: Dot1q子接口实现vlan之间的通信 一:根据项目需求搭建好拓扑图如下: 二:配置 HUAWEI: CISCO

  9. Bad escape character ‘ygen’ 错误原因!

    ssh-keygen -t rsa -C “邮箱” ssh-keygen 命令中间没有空格,如果在ssh后面加上空格,会得到Bad escape character ‘ygen’.的错误.

  10. elasticsearch 5.x 系列之五 数据导入导出

    一.首先给大家发一个福利,分享一个elasticsearch 数据导出工具. esm github 源码地址: https://github.com/medcl/esm 下载编译好的对应elastic ...