奇亿平台-奇亿注册|奇亿官方代理网站首页

【奇亿在线平台】TensorFlow 2.X,会是它走下神坛的开始吗?

机械之心原创
机械之心编纂部

,

如今都 2021 年了,机械进修好填的坑都已经填了,人人都在想怎么将模型用到各类实际义务上。我们再去商议深度进修框架,吐槽它们的体验,会不会有点过时?并不会,新模型与新算法,老是框架的第平生产力。

2020年下半年电子产业上市辅导备案企业总览:广东地区占比近58%

广东,总览,下半年,辅导,备案【奇亿平台安全吗】【奇亿登录注册】 [好文分享:www.pp00.com]

,从 Theano 一代元老,到 TensorFlow 与 PyTorch 的两元世界,到如今各个国产框架与对象组件的鼓起。深度进修框架,老是追随前沿 DL 手艺的提高而改变。,
,不外今天并不是商议深度进修框架的演变,而只是纯真分享一下在算法工程中,使用 TensorFlow 碰到的各类问题与感触。,
,TF 1.X :令人又爱又恨,
,TensorFlow 2.X 已经正式发布 1 年多了,一周多前 TF 2.4 方才发布,看 Release Notes 最新版仍然存眷多机并行练习、Keras 机能等新模块,甚至发布了「TensorFlow 版」的 NumPy 对象。然而,除去这些新特征,TF 2.X 好多不协调的问题仍然存在。,[转载出处:www.pp00.com]

,以至于,一向维护 TF 1.15 的算法工程师,似乎 TensorFlow 的更新,对本身没有任何影响。TF 1.X,仍然活跃在浩瀚的 GPU 上。,
,若是我们起头一项新义务,最先要做的就是查找已有的研究,以及已有的开源代码。如许的开源代码,即使到如今,好多最新的前沿模型,尤其是谷歌大脑的各项研究,仍然采用的 1.X 的写法与 API。,
,好比说,预练习说话模型 T5、Albert、Electra 或许图像处理模型 EfficientNet 等等。他们实际上照样用 1.X 那一套方式写的,只不外能兼容 TensorFlow 2.X。,
,你会惊异地发现,它们的 TensorFlow 导入都是这种气势:,
,
,个中,「compat」是 TF2.X 专门为兼容 TF 1.X 设置的模块。今朝,照样有好多前沿研究,放不下 TF 1.X。那就更不消说之前的经典模型,绝大多都是 TF 1.X 写的。,
,不外若是只是导入「compat」模块,那么使用 TensorFlow 2.0 是为了什么?岂非只是馋它的版本号么。,
,维护 OR 更新?,
,假设我们要使用这些 TF 模型,从开源代码起头进行点窜或重写。那么就碰到了第一个问题,我究竟是维护一个 TF 1.X 的代码库呢,照样忍痛更新的 2.X?,
,假定我们决意维护 1.X 的静态较量图,那么你会发现,我们写代码只是在写较量图,中央变量打印不出信息,轮回语句或前提语句,根基都要改成矩阵运算形式。,
,TF 1.X 照样挺费劲的,就说打印变量,只挪用 tf.print() 还不成,你还有将这条语句绑定到首要较量流程上,掌握 Dependency。如许,才能打印出真实的矩阵信息。,
,
,假设我们选择更新到 TF 2.0,根基上就相当于重写模型了。官方的确有一个升级剧本:,
,
,然则看上面日志也就知道,它差不多等同于「import tensorflow.compat.v1 as tf」。真正要行使上 TF 2.0 的 Eager Exexution,照样到手动重写。,
,API 接口,难以清楚,
,Tensorflow 1.X 时代,静态图虽说上手稍微难了那么一丢丢,然则这并不是什么问题。既然入了机械进修的坑,这当然是能把握的。,
,TensorFlow 1.X 欠好用的首要原因,还在于 API 接口对照 杂沓。,
,
,说究竟,它们都是根基的神经收集层级,好多时候都是有重叠的。这种 API 上的冗余,极大地降低了 TF 的生态质量。尤其是,好多官方教程,好多谷歌开源的模型代码,都用的是 tf.contrib.slim 来写模型。好比说 MobileNet 之类的经典模型,官方实现就是用 TF 第三方库「contrib」中的一个模块「slim」来写的。,
,
,然后到了 TensorFlow 2.X,整个「contrib」库都被抛却了。,
,在 1.X 后期,各个教程使用的接口都不沟通,我们又分不清楚哪个接口究竟好,哪个究竟差。由此引出来的,就不光是很差的用户体验,同时还有机能上的差别。,
,若是我们用 1.X 中的 tf.nn.rnn_cell 来做 LSTM,这也是没问题的,只不外会稀奇慢。若是我们将运算子换成 LSTM,那么无疑速度会提拔好多。整个 TF 1.X,在 API 接口上,老是存在大量的坑,需要算法工程师稀奇注重。,
,那么 TensorFlow 2.X 呢?,
,固然说 TF 2.X 偏向很明确,默认采用动态较量图,鼎力推进 tf.keras 如许的高级 API。这些都非常好,甚至用 Keras 写模型比 PyTorch 还要精简一些。,
,然则别忘了 TF 传统艺能是静态较量图,它生成就比 tf.keras 拥有更多的底层设置。这就会导致两种割裂的代码气势,一种是非常底层,使用 tf.function 等更一样的 API 构建模型,能进行各方面的定制化。另一种则非常抽象,使用 tf.keras 像搭积木一般搭建模型,我们不消认识底层的架构若何搭建,只需要存眷整体的设计流程即可。,
,若是教程与 API 对两种模式都分的清清楚楚还好,但问题在于,引入 Keras 却让 API 又变得加倍杂沓了。,
,TF 2.X 官方教程今朝以 Keras API 为主。

,
,这其实和 1.X 的情形照样挺像的,统一个功能能由分歧的 API 实现,然则分歧 API 进行组合的时候,就会出问题。也就是说,若是我们搅浑了 tf.keras 和底层 API,那么这又是一个大坑。,
,好比说使用 tf.keras,以 model = tf.keras.Sequential 的体式构建了模型。那么练习流程又该是什么样的?是直接用 model.fit() ,照样说用 with tf.GradientTape() as Tape 做更具体的定制?若是我们先自界说损失函数,那如许用高级 API 界说的模型,又该怎么点窜?,
,TF 2.X 官方教程,有的以类继续的新体式,以及更底层的 API 构建模型。,
,正本还没进入 TF 2.X 时代时,keras 与 tf 两部门 API 互不影响,该用哪个就用哪个。然则如今,tf.keras 中的高级 API,与 tf 中的底层 API 经常需要混用,如许的整合会闪开发者不知所措。,
,与此同时,API 的割裂,也加大了斥地者寻找教程的难度。因为除了「TF2.0」 这个要害字,同时还要弄清楚:这个文档是关于 TF2.0 自己的,照样关于 tf.keras 的。,
,教程文档,
,不管怎么说,TensorFlow 都是第一大深度进修框架,GitHub 上高达 15.2 万的 Star 量远超另外框架。其实在 TF 早期使用静态较量图的时期,整体教程照样对照连贯的,静态较量图有一条完整的路线。并且我们还有 tensor2tensor 如许的代码库,里面的代码质量照样非常不错的。,
,后来跟着深度进修成为主流,也就有了各类非官方教程,tf.contrib 模块里面的代码也就越来越多。,
, 到了 TF 2.X,tf.keras 整合进去之后,相关的文档照样对照少的,以至于整个指引文档成了 Keras 和经典 TF 的夹杂。,
,照样拿之前的例子来说,在官方文档上,若是要做图像识别,教程会敷陈你用 tf.keras.Sequential() 组合分歧的神经收集层级,然后依次界说 model.compile() 与 model.fit(),然后深度进修模型就能练习起来了。,
,
,同样,若是要做图像生成模型,那么教程照样敷陈你用  tf.keras.Sequential() 组合神经收集层级,但接下来却需要本身界说损失函数、最优化器、掌握迭代梯度等等。@tf.function、tf.GradientTape() 等等新模块,都邑用上。,
,采用 @tf.function、tf.GradientTape()  等 TF 2.X 新特征的一个示例。

,
,除了这两种,对于更复杂的模型,TF2.0 还有一套解决方案,即从 tf.keras.Model 继续模型,从新实现 call 方式。,
,总之官方文档有多种解决方案,能处理沟通的问题。这种高级 API 与底层 API 夹杂在一路的做法稀奇常见,是以好多时候会感受 TF 2.X 的手艺路线不是非常明确。,
,此外,tf.keras 是个「大杂烩」,神经收集层级、最优化器、损失函数、数据预处理 API 等等都包含在内。它要与 tf.nn、tf.train、tf.data 之类的 API 在沟通层级,总感受有点怪怪的。看上去底层 API 与高级 API 两大类文档,应该是平级的,如许找起来对照好懂得。,
,
,还有一点:速度,
,按理来说,TensorFlow 的速度优化的应该照样能够的。并且正本各框架的速度不同就不是很显着,所以速度上应该没什么问题。然则在做算法工程的时候,总会听到四周的同伙埋怨 TensorFlow 的速度还不如 PyTorch,埋怨 TF 2.0 尽管用上了动态较量图,但速度还不如没升级之前的 TF 1.X 代码。,
,如许埋怨最大的或者性是,在做算法时选择的 Kernel 不太对,或许较量流、数据流在某些处所存在瓶颈,甚至是某些练习设置就基本错了。所以说,速度方面,很或者是我们本身优化没做到位。然则 TF 1.X 升级到 2.X 之后,速度真的会有不同吗?,
,笔者还真的做过非尺度测试,若是使用升级剧本完成升级,同样的代码,两者底层的较量子还真纷歧样。速度上甚至 TF 1.X 略有优势。,
,在最初的 TF 1.X 代码中,好多矩阵运算用的都是 tf.einsum(),静态较量图应该把它都转化为了 MatMul 等较量子,整体揣摩速度平均是 16ms。,
,沟通代码,在 TF 1.X 下的揣摩速度。

,
,而若是凭据 tf.compat.v1 升级代码,沟通的模型的确底层较量子都不太一般。但没想到的是,TF 2.X 采用了新的 Einsum 运算,速度似乎并不占优?,
,沟通代码,在 TF 2.X 下的揣摩速度。

,
,小结,放眼望去,国产的几种框架或许会是不错的选择。它们至少都能经受得起买卖的考验,且与框架维护者交流起来也会对照轻易。此外,一些国产新兴框架,没有汗青负担,手艺路线对照统一与确定。一样而言,只要练习效率高、布置轻易高效、代码对照好维护,且能知足买卖地点范畴的需求,那么这就是个好框架。

总而言之,适合本身的才是最好的。,
【奇亿娱乐注册登录地址】【奇亿登录测速注册】

十大事件,见证智能安防激荡2020

十大,激荡,安防,见证,事件

点赞