【重磅】TensorFlow 1.0 官方正式发布,重大更新及5大亮点

【新智元导读】昨天凌晨谷歌正式发布了TensorFlow1.0版,改进了库中的机器学习功能,发布了XLA的实验版本,对Python和Java用户开放,提升了debugging,并且加入和改进了一些高级API,其中包括Keras。一系列新的改进,都会让目前这个最受欢迎的深度学习框架变得更快、更灵活、更实用。

谷歌TensorFlow 开发者大会演讲笔记。来源:Virginia Poltrack (@VPoltrack) | Twitter

在发布第一年,TensorFlow 已经帮助研究者、工程师、艺术家、学生以及其他许多人在许多领域取得了进展,从机器翻译到检测皮肤癌早期症状到预防糖尿病致盲。我们很高兴看到人们在超过6000个开源在线存储库项目中使用 TensorFlow。

今天,作为在山景城举办的首届年度TensorFlow开发者峰会的一部分,我们宣布正式发布 TensorFlow 1.0。它的新特性包括:

更快:

TensorFlow 1.0 运行速度之快令人难以置信!XLA 为未来更多的性能改进奠定了基础,而且 tensorflow.org 新提供“tips & tricks”帮助用户微调模型以实现最大速度。我们将很快发布一些常用模型的更新实现,以展示如何充分利用TensorFlow 1.0:包括基于 8 GPU 对 Inception v3 实现7.3倍加速,以及基于 64 GPU 对分布式 Inception v3 训练实现58倍加速!

更灵活

TensorFlow 1.0 还加入了一些高级API,包括 tf.layers,tf.metrics 和 tf.losses 模块。此外,它还包含一个全新的 tf.keras 模块,能够与 Keras 完全兼容,Keras 是另一个流行的高级神经网络库。

更实用

TensorFlow 1.0 还提供稳定的 Python API,这让获取新功能更容易,而且不必担心破坏现有的代码。

TensorFlow 1.0的其他亮点:

  • Python APIs已经更多地向Numpy转型。对于此类和其他向后兼容的以支持API稳定发展的更改,请使用我们的迁移指南和转换脚本。
  • Java和Go的实验API
  • 高级API模块tf.layers,tf.metrics和tf.losses - 在纳入skflow和TF Slim之后从tf.contrib.learn中提取
  • 发布了面向CPU和GPU的TensorFlow图形的特定领域编译器XLA的实验版本。 XLA正在迅速发展 - 预计在未来的发布中将看到更多的进展。
  • 生成TensorFlow Debugger(tfdbg),一个用于调试实时TensorFlow程序的命令行界面和API。
  • 用于对象检测和本地化的新Android demos以及基于摄像头的图片样式化。
  • 安装改进:添加了Python 3 docker镜像,TensorFlow的pip包现在兼容PyPI。这意味着TensorFlow现在可以简单调用pip install tensorflow来安装。

我们很高兴地看到世界各地TensorFlow社区的发展速度。要了解有关TensorFlow 1.0及其使用方式的更多信息,可以在YouTube上观看TensorFlow Developer Summit talks,涵盖从高级API、TensorFlow(移动版)到新XLA编译器的最新更新,以及TensorFlow的令人激动的使用方法。

开发者大会的视频:https://www.youtube.com/watch?v=4n1AHvDvVvw

TensorFlow生态系统持续成长,包括Fold 动态批处理和Embedding Projector等工具以及我们现有工具(如TensorFlow Serving)的更新。 我们非常感谢社区贡献者、教育工作者和将深度学习的最新进展带给每个人的研究人员 。 我们期待在如GitHub issues, Stack Overflow, @TensorFlow, the discuss@tensorflow.org group等群组与未来各论坛上与您的合作。

Keras 成为 TensorFlow 默认API

实际上,在上个月,Keras 的作者、谷歌 AI 研究员 Francois Chollet 就宣布:Keras 将会成为第一个被添加到 TensorFlow 核心中的高级别框架,变成 Tensorflow 的默认 API。

Keras 是一个高级别的 Python 神经网络框架,能在 TensorFlow 或者 Theano 上运行。此外,能用到 TensorFlow 上的还有一些高级别的 Python 神经网络框架,比如,TF-Slim,虽然它们发展更不完善,也不是 TensorFlow 的核心部分。

神经网络研究者 Rachel Thomas 在 fast.ai 上撰文介绍了这一消息,并写下了他使用TensorFlow 的心得体会:

他说,使用 TensorFlow 给我的感觉就是我还不够聪明,但是,在使用 Keras 的时候我会觉得神经网络要比我想象的简单。这是因为,TensorFlow 的 API 过于冗长和混乱,也是因为 Keras 拥有我体验过的最贴心的、最具表达力的 API。对我来说,在刚开始使用TensorFlow 受挫后就来公开批评它有点尴尬,它让人觉得沉重、不自然。当然,其中有我自己的原因。但是,Keras 和 Theano 确实证实了我的想法:tensors 和 神经网络不一定都是那么折磨人的。

在一次大学作业中,我曾经使用一个硬件描述语言,通过添加和改变 CPU 暂存器中的字节来编码除法(division)。这是一个很有趣的练习,但是我非常确定,我不想用这种方式对神经网络进行编码。使用一个更高级别的语言的好处是显而易见的:更快地编码、更少的bug,以及,更少的痛苦。Keras 的好处还有更多——它更适配神经网络的概念,能促进新的发现。Keras 让我更加擅长神经网络,因为语言抽象与神经网络的概念搭配得更加好。

使用与我的思维相同的概念语言写程序,能让我把注意力集中在需要解决的难题上,而不是编程语言的伪迹上。因为,当我把更多的精力花在头脑中的思维与编程语言之间的概念转换的时候,我的思考就会变慢。TensorFlow 影响了我的生产力。

正如 Chollet 所写:“如果你想要长期使用一个更高级别的面向对象的 TF API ,Karas 就是正确的道路。”

Keras 的作者、谷歌 AI 研究员 Francois Chollet 在谷歌TensorFlow 开发者大会上演讲。

TensorFlow 1.0 重大功能及改善

  • XLA(实验版):初始版本的XLA,针对TensorFlow图(graph)的专用编译器,面向CPU和GPU。
  • TensorFlow Debugger(tfdbg):命令行界面和API。
  • 添加了新的python 3 docker图像。
  • 使pip包兼容pypi。TensorFlow现在可以通过 pip install tensorflow 命令安装。
  • 更改了几个python API的调用方式,使其更类似 NumPy。
  • 新的(实验版)Java API。
  • Android:全新人物检测+跟踪演示实现——“Scalable Object Detection using DNN”(带有额外的YOLO对象检测器支持)。
  • Android:全新基于摄像头的图像风格转换演示,使用了神经网络艺术风格转换技术。

重大 API 变动

为了帮助你升级现有的TensorFlow Python代码匹配以下 API 更改,我们准备了一个转换脚本:

此工具让你升级现有的TensorFlow Python脚本。此脚本可以在单个Python文件上运行:

tf_upgrade.py --infile foo.py --outfile foo-upgraded.py

如果无法修复,系统会打印一个错误列表。你还可以在目录树上运行它:

tf_upgrade.py --intree coolcode -outtree coolcode-upgraded

在上述任一情况下,系统会将转储一份报告,详细记录变化情况:

third_party/tensorflow/tools/compatibility/test_file_v0.11.py Line 125

Renamed keyword argument from `dim` to `axis`

Renamed keyword argument from `squeeze_dims` to `axis`

Old: [[1, 2, 3]], dim=1), squeeze_dims=[1]).eval(),

~~~~ ~~~~~~~~~~~~~

New: [[1, 2, 3]], axis=1), axis=[1]).eval(),

~~~~~ ~~~~~

  • TensorFlow / models已经被移动到一个单独的github库。
  • 除法和模运算符(/,//,%)现在匹配 Python(flooring)语义。这也适用于 [tf.div] 和 [tf.mod]。要获取基于强制整数截断的行为,可以使用 [tf.truncatediv] 和 [tf.truncatemod]。
  • 现在推荐使用 [tf.divide()] 作为除法函数。[tf.div()] 将保留,但它的语义不会回应 Python 3 或 [from future] 机制。
  • tf.reverse() 现在取轴的索引要反转。例如 [tf.reverse(a,[True,False,True])] 现在必须写为 [tf.reverse(a,[0,2])]。 [tf.reverse_v2()] 将保持到 TensorFlow 1.0 最终版。
  • [tf.mul,tf.sub ] 和 [tf.neg] 不再使用,改为 [tf.multiply],[tf.subtract] 和 [tf.negative]。
  • [tf.pack] 和 [tf.unpack] 弃用,改为 [tf.stack] 和 [tf.unstack]。
  • [TensorArray.pack] 和 [TensorArray.unpack] 在弃用过程中,将来计划启用 [TensorArray.stack] 和 [TensorArray.unstack]。
  • 以下Python函数的参数在引用特定域时,全部改为使用 [axis]。目前仍将保持旧的关键字参数的兼容性,但计划在 1.0 最终版完成前删除。
  • tf.argmax: dimension 变为 axis
  • tf.argmin: dimension 变为 axis
  • tf.count_nonzero: reduction_indices 变为 axis
  • tf.expand_dims: dim 变为 axis
  • tf.reduce_all: reduction_indices 变为 axis
  • tf.reduce_any: reduction_indices 变为 axis
  • tf.reduce_join: reduction_indices 变为 axis
  • tf.reduce_logsumexp: reduction_indices 变为 axis
  • tf.reduce_max: reduction_indices 变为 axis
  • tf.reduce_mean: reduction_indices 变为 axis
  • tf.reduce_min: reduction_indices 变为 axis
  • tf.reduce_prod: reduction_indices 变为 axis
  • tf.reduce_sum: reduction_indices 变为 axis
  • tf.reverse_sequence: batch_dim 变为 batch_axis, seq_dim 变为 seq_axis
  • tf.sparse_concat: concat_dim 变为 axis
  • tf.sparse_reduce_sum: reduction_axes 变为 axis
  • tf.sparse_reduce_sum_sparse: reduction_axes 变为 axis
  • tf.sparse_split: split_dim 变为 axis
  • tf.listdiff 已重命名为 tf.setdiff1d 以匹配 NumPy 命名。
  • tf.inv 已被重命名为 tf.reciprocal(组件的倒数),以避免与 np.inv 的混淆,后者是矩阵求逆。
  • tf.round 现在使用 banker 的舍入(round to even)语义来匹配 NumPy。
  • tf.split现在以相反的顺序并使用不同的关键字接受参数。我们现在将NumPy order 匹配为tf.split(value,num_or_size_splits,axis)。
  • tf.sparse_split现在采用相反顺序的参数,并使用不同的关键字。我们现在将NumPy order 匹配为tf.sparse_split(sp_input,num_split,axis)。注意:我们暂时要求 tf.sparse_split 需要关键字参数。
  • tf.concat现在以相反的顺序并使用不同的关键字接受参数。特别地,我们现在将NumPy order匹配为tf.concat(values,axis,name)。
  • 默认情况下,tf.image.decode_jpeg使用更快的DCT方法,牺牲一点保真度来提高速度。通过指定属性dct_method ='INTEGER_ACCURATE',可以恢复到旧版行为。
  • tf.complex_abs已从Python界面中删除。 tf.abs支持复杂张量,现在应该使用 tf.abs。
  • Template.var_scope属性重命名为.variable_scope
  • SyncReplicasOptimizer已删除,SyncReplicasOptimizerV2重命名为SyncReplicasOptimizer。
  • tf.zeros_initializer()和tf.ones_initializer()现在返回一个必须用initializer参数调用的可调用值,在代码中用tf.zeros_initializer()替换tf.zeros_initializer。
  • SparseTensor.shape已重命名为SparseTensor.dense_shape。与SparseTensorValue.shape相同。
  • 分别替换tf.scalar_summary,tf.histogram_summary,tf.audio_summary,tf.image_summary与tf.summary.scalar,tf.summary.histogram,tf.summary.audio,tf.summary.image。新的摘要ops以名字而不是标签作为它们的第一个参数,意味着摘要ops现在尊重TensorFlow名称范围。
  • 使用tf.summary.FileWriter和tf.summary.FileWriterCache替换tf.train.SummaryWriter和tf.train.SummaryWriterCache。
  • 从公共API中删除RegisterShape。使用C++形状函数注册。
  • Python API 中的 _ref dtypes 已经弃用。
  • 在C++ API(in tensorflow/cc)中,Input,Output等已经从tensorflow::ops命名空间移动到tensorflow。
  • 将{softmax,sparse_softmax,sigmoid} _cross_entropy_with_logits的arg order更改为(labels,predictions),并强制使用已命名的args。

Bug 修改及其他变动

  • 大量 C++ API 更新。
  • 新的 op:parallel_stack。
  • 为RecordReader/RecordWriter 增加了 tf io 压缩选项常量。
  • 添加了 sparse_column_with_vocabulary_file,指定将字符串特征转换为ID的特征栏(feature column)。
  • 添加了index_to_string_table,返回一个将索引映射到字符串的查找表。
  • 添加string_to_index_table,返回一个将字符串与索引匹配的查找表。
  • 添加ParallelForWithWorkerId函数。
  • 添加string_to_index_table,返回一个将字符串与索引匹配的查找表。
  • 支持从contrib / session_bundle中的v2中的检查点文件恢复会话。
  • 添加了tf.contrib.image.rotate函数,进行任意大小角度旋转。
  • 添加了tf.contrib.framework.filter_variables函数,过滤基于正则表达式的变量列表。
  • make_template()可以添加 custom_getter_ param。
  • 添加了关于如何处理recursive_create_dir现有目录的注释。
  • 添加了QR因式分解的操作。
  • Python API中的分割和mod现在使用flooring(Python)语义。
  • Android:预构建的libs现在每晚构建。
  • Android: TensorFlow 推理库 cmake/gradle build 现在归在 contrib/android/cmake下面
  • Android:更强大的会话初始化(Session initialization)代码。
  • Android:当调试模式激活时,TF stats现在直接显示在demo和日志中
  • Android:全新/更好的 README.md 文档
  • saved_model可用作tf.saved_model。
  • Empty op 现在是有状态的。
  • 提高CPU上ASSIGN运算的scatter_update的速度。
  • 更改reduce_join,使其处理reduction_indices的方式与其他reduce_ops相同。
  • 将TensorForestEstimator移动到contrib/tensor_forest。
  • 默认情况下启用编译器优化,并允许在configure中进行配置。
  • 使指标权重 broadcasting 更加严格。
  • 添加新的类似队列的StagingArea和新运算 ops:stages 和 unstage。

原文发布于微信公众号 - 新智元(AI_era)

原文发表时间:2017-02-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT派

常用python组件包

$ pip list Package Version ---------------------- ------------- a...

37820
来自专栏hadoop学习笔记

大规模特征构建实践总结

一般大公司的机器学习团队,才会尝试构建大规模机器学习模型,如果去看百度、头条、阿里等分享,都有提到过这类模型。当然,大家现在都在说深度学习,但在推荐、搜索的场景...

14540
来自专栏数据科学与人工智能

【Python环境】探索 Python、机器学习和 NLTK 库

挑战:使用机器学习对 RSS 提要进行分类 最近,我接到一项任务,要求为客户创建一个 RSS 提要分类子系统。目标是读取几十个甚至几百个 RSS 提要,将它们的...

30280
来自专栏iOS技术

iOS 地图点标记聚合方案(基于四叉树)

前言 在地图相关应用的开发中,我们常常遇到一个问题,当地图标注点过多的时候,会造成用户体验差、应用卡顿的情况。所以,我们需要一套高效的算法来解决标注的聚合、分散...

34190
来自专栏人工智能LeadAI

MLSQL解决了什么问题

1、项目难以重现,可阅读性和环境要求导致能把另外一个同事写的python项目运行起来不得不靠运气

24130
来自专栏新智元

DeepMind 开源内部深度学习框架 Sonnet,研究通过梯度下降学习

【新智元导读】DeepMind 今天开源了最新的深度学习框架 Sonnet。Sonnet 被专门设计用于与 TensorFlow 协同工作,能够更方便、直接地构...

32130
来自专栏CVer

小米开源自研移动端深度学习框架MACE

Mobile AI Compute Engine (MACE) 是一个专为移动端异构计算平台优化的神经网络计算框架。MACE 支持 TensorFlow 和 C...

21740
来自专栏华章科技

Python爬虫新手进阶版:怎样读取非结构化网页、图像、视频、语音数据

导读:常见的数据来源和获取方式,你或许已经了解很多。本文将拓展数据来源方式和格式的获取,主要集中在非结构化的网页、图像、视频和语音。

21630
来自专栏冰霜之地

Threes-AI 玩小三传奇 (上)

1 个月前和另外二位小伙伴一起参加了一个 AI 的比赛。虽然比赛结果不理想,至少我享受到了编程过程中的乐趣。从这次比赛中让我认识到 Go 除了写服务端,写游戏模...

18320
来自专栏人工智能头条

DMLC深盟分布式深度机器学习开源平台解析

24060

扫码关注云+社区

领取腾讯云代金券