Google Development Days China 2018近日在中国召开了。非常遗憾,小编因为不可抗性因素滞留在合肥,没办法去参加。但是小编的朋友有幸参加了会议,带来了关于tensorlfow的一手资料。这里跟随小编来关注tensorflow在生产环境下的最佳应用情况。

Google Brain软件工程师冯亦菲为我们带来了题为“用Tensorflow高层API来进行模型原型设计、训练和生产投入”的精彩报告。

冯亦菲姐姐给我们讲了一些tensorflwo的新的API的变动,最重要的是提出了一些使用tensorflow的建议。

总结出来有六个方面,分别是:
  • 用Eager模式搭建原型
  • 用Datasets处理数据
  • 用Feature Columns提取特征
  • 用Keras搭建模型
  • 借用Canned Estimators
  • 用SavedModel打包模型

下面我们依次来了解下这六个方面。

用Eager模式搭建原型

作为计算机界的一份子,我们知道静态图的效率自然是快快的,但是动态图的使用为我们的使用带来的很多方便。17年的时候,各大框架动态图大行其道,于是Google提出了tf.contrib.eager应对挑战。

使用Eager有什么好处呢?回想之前我们在调试tensorflow的程序时,不得不使用sess.run(),麻烦的要死,而使用Eager就可以直接的将变量打印出来,大大方便了我们的调试;好处不止这么多,在进行模型搭建的时候,以前我们需要仔细考虑下Tensor的shape,一旦出错要定位也很不容易。而使用Eager可以一边搭建网络结构,一边将shape打印出来确认下是否正确。这就使我们在搭建网络时更加方面快捷了;此外,使用Eager后,自定义Operation和Gradient也会方便很多。

下面举个简单的小例子。首先使用pip install tf-nightly(或GPU版本pip install tf-nightly-gpu)来安装Eager。

import tensorflow as tfimport tensorflow.contrib.eager as tfetfe.enable_eager_execution() #开启Eager模式a = tf.constant([5], dtype=tf.int32)for i in range(a):   print (i)

使用Eager后我们可以很顺利的执行上述代码。但是如果没有Eager,就会报Tensor对象不能解释为integer的错误。从缺点上来讲,Eager的引入也势必造成额外的成本。

用Datasets处理数据

tensorflow的数据读入有三种方式:通过feeding的方式;通过管道(pipeline)的方式;直接读取变量或常量中保存的数据。Datasets属于上面提出的第二种方式,可以简化数据输入过程,而且能够提高数据的读入效率。

Datasets的组成如上如所示。其中:

  • Dataset:创建和转换数据集的基本;
  • TextLineDataset:从文本文件中读取行;
  • TFRecordDataset:读取TFRecord文件;
  • FixedLengthRecordDataset:从二进制文件读取固定大小的记录;
  • Iterator:提供一种一次访问一个数据集元素的方法。

对于Datasets的使用,我们可以使用Dataset的子类提供的方法,也可以直接使用基类的方法:tf.data.Dataset.from_tensors()或者tf.data.Dataset.from_tensor_slices()。

用Feature Columns提取特征

Feature Columns实际上是一个数据结构,一个用于描述特征的数据结构。利用Feature Columns可以很方便的对输入训练模型前的特征进行处理。比如鸢尾花的识别,对于输入数据,每列表示不同的特征,如花瓣的长度,花萼的长度等等,我们想要对不同的列分别进行处理(或者对所有的列进行处理),使用Feature Columns就可以轻松的实现。

如上图所示,Feature Columns形成了对输入数据集的结构性描述。可以方便我们对每列数据进行处理,而且使得代码的可读性更强。

用Keras搭建模型

想必大家对Keras已经比较了解了,使用Keras来构建一个神经网络,简直是飞一般地速度,而且完美的兼容tensorflow。

simple_model=Sequential()simple_model.add(Dense(3,input_shape=(x.shape[1],),activation='relu',name='layer1'))simple_model.add(Dense(5,activation='relu',name='layer2'))simple_model.add(Dense(1,activation='sigmoid',name='layer3'))

构建一个模型就是如上面这么简单,而且调用API中定义好的模型更是只需要一句话,极其的方便。

借用Canned Estimators

Estimators API提供了模型选择、评估、训练等一些列功能。在1.3版本后,Google又增加了一层,称之为Canned Estimators。只需要一行代码就能够创建深度模型。Estimators可以结合上面提到的Feature Columns一起使用。

tf.estimator.Estimator是基类;Pre-made Estimators是基类的子类,是已经定义好的模型,我们可以直接拿来使用;Custom Estimators是基类的实列,并不是定义好的,需要我们自己实现模型的定义。

对于这里的模型,由三部分组成:

  • Input function:输入函数,即我们前面所说的Datasets,对于数据进行表示;
  • Model function: 实验模型的训练、验证、测试以及监控模型的参数;
  • Estimators: 控制数据流以及模型的各种运算。
用SavedModel打包模型

相比于tensorflow原版的tf.train.Saver保存模型的方式,SavedModel提供了更好的将模型部署到生成环境的手段,更适用于商业目的。

如上图右下方部分,在使用SavedModel打包模型时,可以产生两种模型:

对应于第一种模型,Tensorflow Model Analysis可以方便我们对模型进行分析,是不是存在参数的问题,抑或是模型哪里设计的不合适等等;通过分析后,感觉模型不错,我们就可以通过Tensorflow Serving进行部署。

此外,相比于Saver的方式,我们在inference时不需要再重新定义Graph(模型),如果使用Saver的话,在使用该模型时就需要再定义该模型,如果是一个程序猿设计并使用的还好,如果换成另一个猿去用这个模型,他又不知道模型的tensor的情况,那就尴尬了。所以使用SavedModel可以让我们更轻松地去使用模型。

总结

Google Developer Days给我们提供了一场盛宴,希望和大家一起学习其中的知识。如果可以,请为这篇文章点个赞吧。据说点赞的都能进Google。

react-native技术的优劣

一招教你读懂JVM和Dalvik之间的区别

NDK项目实战—高仿360手机助手之卸载监听

(Android)面试题级答案(精选版)

非科班出身程序员:如何获取职业资源、进入好公司?

相信自己,没有做不到的,只有想不到的

在这里获得的不仅仅是技术!

Google开发者大会:你不得不知的Tensorflow小技巧相关推荐

  1. TensorFlow Lite:TensorFlow在移动设备与嵌入式设备上的轻量级跨平台解决方案 | Google 开发者大会 2018...

    Google 开发者大会 (Google Developer Days,简称 GDD) 是展示 Google 最新开发者产品和平台的全球盛会,旨在帮助你快速开发优质应用,发展和留住活跃用户群,充分利用 ...

  2. 【Google 开发者大会】一篇看懂 TensorFlow 如何助力高效开发

    代码不止 精彩不断! 刚圆满结束的谷歌开发者大会, 为大家带来了 TensorFlow 机器学习专场技术演讲 那么 TensorFlow 有哪些新鲜出炉的技术优化呢? 点击下面视频,带你1分钟看懂机器 ...

  3. 分布式 TensorFlow:Distribution Strategy API 丨Google 开发者大会 2018

    Google 开发者大会 (Google Developer Days,简称 GDD) 是展示 Google 最新开发者产品和平台的全球盛会,旨在帮助你快速开发优质应用,发展和留住活跃用户群,充分利用 ...

  4. 2017 Google 开发者大会直播入口

    今年,Google 开发者大会再度来袭!大会将于 12 月 13 日和 14 日在上海举办,主题涵盖机器学习 (Machine Learning).Android.移动网络(Mobile Web).T ...

  5. 2021 Google 开发者大会进行时: 汇聚开发者合力,共建全球技术生态

    一年一度的科技盛会 2021 Google 开发者大会 11 月 16 日已如约与各位线上相见.以 "Develop as One" 为主题,重磅主旨演讲和超 900 分钟技术干货 ...

  6. 2021 Google 开发者大会进行时:汇聚开发者合力,共建全球技术生态

    一年一度的科技盛会 2021 Google 开发者大会昨日已如约与各位线上相见.以 "Develop as One" 为主题,重磅主旨演讲和超 900 分钟技术干货现已倾囊献上. ...

  7. 2017 Google 开发者大会全记录

    2017 年的 Google 在中国刷了好几个记忆点,从五月乌镇 AlphaGo 与中国顶尖棋手的终极对弈,到欧阳靖为 Google 翻译专门创作了 MV 大片,再到十二月今日的上海,2000 多位开 ...

  8. Develop as One | 2021 Google 开发者大会主旨演讲精彩回顾

    2021 年 世界比起过往更需要彼此联结 谷歌始终与大家携手共进 共创机遇,共谋发展 一分钟回顾主旨演讲亮点 2021 Google开发者大会主旨演讲精彩回顾 前往官网,了解更多涵盖 18 条产品线, ...

  9. 中国2017 Google 开发者大会第一天简单回顾

    昨天有幸参加了中国2017 Google 开发者大会,在这第一天就收获满满,昨天太忙了,今天早晨来一起简单回顾一下,可以让没有参加的童鞋们感受一下现场的温度. 早早就来到了会议现场,外面看不出什么特别 ...

最新文章

  1. ARM 发布新一代 GPU 架构,还有一个机器学习处理器
  2. Java集合LinkedHashMap
  3. SqlServer和MySQL中存储过程out返回值处理C#代码
  4. jzoj3189-解密【字符串hash】
  5. PHP ajax 传递中文乱码,ajax+php传递中文乱码解决办法
  6. Spring Data JPA 从入门到精通~@PreUpdate异常场景分析
  7. jQuery 树插件ZTree使用Demo
  8. 7.Shell 编程从入门到精通 --- 流编辑
  9. 偷窥Selenium4 0带有网芯的相对定位器3 1
  10. 3g显卡测试软件,显卡测试平台说明及Heaven benchmark
  11. 软件工程学习笔记(八)~习题:建立等价类表
  12. 笔记本计算机图标怎么设置出来,电脑桌面图标隐藏了怎么弄出来
  13. MySQL TRUNCATE
  14. 微信支付链接二维码生成
  15. 大学教育和IT培训有何区别?
  16. python-列表处理log日志、字典处理log日志学习总结
  17. canvas实现高斯模糊
  18. 数据湖在大数据场景下应用和实施方案调研笔记(增强版)
  19. 程序员如何提高自制力
  20. Kafka 是如何建模数据的?

热门文章

  1. 周末ROS学习沙龙第三期——launch文件、自定义服务通信、控制机器人移动、传感器数据处理
  2. C++新特性探究(十):Lambda
  3. hive 修改分桶数 分桶表_疯狂Hive之DDL操作二(三)
  4. 计算机教师职称申报工作总结,个人评定一级教师工作总结
  5. php 重定向 post,使用php curl getpost方法向页面文件发送重定向指令
  6. 2100 反弹shell无法粘贴_技术成长日记-Vim实用技巧-4.6复制/删除/粘贴
  7. SpringBoot POM说明
  8. BiquadFilterNode
  9. tesseract 提升识别质量
  10. d3 v5 api Axes