技术开发 频道

深度解读TensorFlow,了解它的最新发展!

  【IT168 评论】TensorFlow的功能

  TensorFlow适用于Matlab和C ++的API,有广泛的语言支持。在前段时间的TensorFlow峰会上,TensorFlow 发布了面向 JavaScript 开发者的全新机器学习框架 TensorFlow.js。

  TensorFlow.js 是一个开源的用于开发机器学习项目的 WebGL-accelerated JavaScript 库。TensorFlow.js 可以为开发者提供高性能的、易于使用的机器学习构建模块,允许研发人员在浏览器上训练模型,或以推断模式运行预训练的模型。TensorFlow.js 不仅可以提供低级的机器学习构建模块,还可以提供高级的类似 Keras 的 API 来构建神经网络。

  TensorFlow其他应用

  研发者还可以在TensorFlow上构建其他机器学习算法,例如决策树或k-Nearest Neighbors。以下是TensorFlow的生态系统:

  TensorFlow生态系统


  从上图可以看出,TensorFlow集成良好,并且支持GPU处理、python和C++语言,研发人员可以将它与docker等容器集成使用。

  TensorBoard

  TensorBoard是一套可视化工具,研发人员使用TensorFlow写的神经网络看上去会显得非常复杂混乱,为了可以更加直观的调试、优化神经网络,谷歌开发了TensorBoard。Tensorboard是tensorflow内置的一个可视化工具,它通过将tensorflow程序输出的日志文件的信息可视化,使得tensorflow程序的理解、调试和优化更加简单高效。Tensorboard的可视化依赖于tensorflow程序运行输出的日志文件,因而tensorboard和tensorflow程序在不同的进程中运行。

  mnist_tensorboard

  TensorFlow在国内的现状

  对于国内的一些初创型AI企业来说,TensorFlow显得尤为重要,但是从目前现状来看,绝大多数的创业公司更忠于老牌深度学习框架,比如:Caffe、Keras、Theano。

  以Keras为例,一些人工智能企业选择它的理由是:Keras句法清晰;API简单,易用;文档齐全,并且文档内容组织地好,从简单到复杂,一步步的指引;扩展性好;后端支持Tensorflow, theano,mxnet,cntk,而且自定义层比较好写,并且关键一点是Keras 强调极简主义——研发者只需几行代码就能构建一个神经网络。

  对于国外而言,TensorFlow是非常受欢迎的,从Github公开的数据中我们可以看到,光是该工具的fork就已经达到了60389,位于同类型工具的第一位。

  然而在TensorFlow的中国社区中,它的影响力却没有那么强大。据了解,目前为止,TensorFlow中国的fork数仅有3315,仅为官方原版TensorFlow社区的5%。

  TensorFlow最新发布

  2018年3月,谷歌发布了Tensorflow 1.7.0版本,相比原版有不少的重大更新。该版本的TensorFlow和英伟达Tensor RT进行了集成,达成对GPU硬件计算环境的高度优化。在测试中,集成版本的TensorFlow比原版(在7毫秒延迟环境下)执行速度快了8倍。

  近日,TensorFlow 发表推文正式发布 TensorFlow v1.9。谷歌大脑研究员、Keras作者François Chollet对于这一版本评价甚高,他说:“不管是不是TF用户都应该看一看:TF最近进步巨大。这是通往ML未来的一大步。”对于TensorFlow新版的发布,各大厂商、企业、研发人员又一次擦亮眼睛,期待着新版本TensorFlow的功能改进。

  那么,这次更新究竟都涉及什么功能呢?

  首先是对Keras的支持。Keras是一个深度学习的高级API,把创建和训练模型所需的工作整合成了很多模块,TensorFlow是它的一个后端。在TensorFlow中,它叫tf.keras。

  据了解,TensorFlow的新手指南变了样,带领小白们从Keras入手,还附上了一个详细的Keras Guide。

  同时,TensorFlow里的Keras本身也有提升。tf.keras升级到了Keras 2.1.6 API,新增了tf.keras.layers.CuDNNGRU和tf.keras.layers.CuDNNLSTM,分别用于更快的GRU实现和更快的LSTM实现。

  主要特点和改进

  •   更新文档tf.keras:基于新Keras的入门和程序员指南页面。

  •   为Keras 2.1.6 API更新tf.keras。

  •   添加tf.keras.layers.CuDNNGRU和tf.keras.layers.CuDNNLSTM层。

  •   将核心功能列的支持和损失添加到梯度boosted tree估计器中。

  •   Python接口用于TFLite优化转换器已扩展,命令行界面(toco,tflite_convert)再次包括在标准pip安装。

  突破性变化

  •   空变量范围,用variable_scope(tf.get_variable_scope(), …)替换variable_scope(”, …)。

  •   用于构建自定义操作的标头从site-packages / external移至site-packages / tensorflow / include / external。

  错误修复

  tfe.Network已弃用,使用tf.keras.Model。

  其他更改

  •   添加GCS配置操作。

  •   更改签名MakeIterator以启用传播错误状态。

  •   两个Dirichlet分布的KL分歧。

  •   对于超过EOF的某些读取,GcsFileSystem行为更一致。

  •   更新tf.scan的基准以匹配eager和graph模式的范围。

  •   为复杂dtypes修复tf.reduce_prod gradient了错误。

  •   在变量中允许使用’.’(例如“hparams.parse(’ab = 1.0’)”),之前这会导致错误。这将对应于具有嵌入式’.’的属性名称。符号(例如’a.b’),只能间接访问(例如通过getattr和setattr)。要设置它,用户首先需要将变量显式添加到hparam对象(例如“hparams.add_hparam(name =’a.b’,value = 0.0)”)。

  •   graph和eager模式下tf.scan的基准。

  •   增加了对FFT,FFT2D,FFT3D,IFFT,IFFT2D和IFFT3D的complex128支持。

  •   使ids独特nn.embedding_lookup_sparse,当批处理中存在重复的ID时,这有助于减少用于查找嵌入的RPC调用。

  •   在boosted tree中支持指标列。

  •   防止tf.gradients()通过整数张量反向传播。

  •   将LinearOperator [1D,2D,3D] Circulant添加到tensorflow.linalg。

  •   Conv3D,Conv3DBackpropInput,Conv3DBackpropFilter现在可提供任意支持。

  •   添加tf.train.Checkpoint用于读写基于对象的检查点。

  •   添加了LinearOperatorKronecker,无密集实现克罗内克积。

  •   允许LinearOperator进行广播。

  •   SavedModelBuilder现在将重复删除指向具有相同基本名称和相同内容的文件的资源名称。请注意,如果之前具有相同名称但内容不同的资源相互覆盖,则可能会导致新资源文件包含在SavedModels中。

  结论

  无论怎样,我们都不得不承认TensorFlow是一个很棒的系统,人们用人工智能做了很多令人惊叹的事情,包括一些医疗保健、电影推荐引擎、音乐、个性化广告以及社交媒体情感挖掘等,TensorFlow确实是实现这些目标的头等功臣!

0
相关文章