0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

TensorFlow 2.0最佳实践及主要变化

电子工程师 来源:lq 2019-02-18 09:34 次阅读

为提高 TensorFlow 的工作效率,TensorFlow 2.0 进行了多项更改,包括删除了多余的 API,使API 更加一致统一,例如统一的 RNNs (循环神经网络),统一的优化器,并且Python 运行时更好地集成了 Eager execution 。

许多 RFC 已经对 TensorFlow 2.0 的这些更改给出了解释。本指南基于您对 TensorFlow 1.x 有一定的了解的前提,为您介绍在 TensorFlow 2.0 中的开发有什么不同。

API 整理

在 TensorFlow 2.0 中,有许多 1.X 的 API 被删除或移动了。也有部分 1.X 的 API 被 2.0 版本的等价 API 所替代:tf.summary,tf.keras.metrics 和 tf.keras.optimizers。自动应用这些重命名,最简单的方法是使用 TensorFlow 2.0 升级脚本。

Eager execution

TensorFlow 1.X 要求用户通过调用 tf.* API 手动的将抽象语法树(图)拼接在一起。然后,它要求用户将一组输出张量和输入张量传递给 session.run() 调用,来手动编译抽象语法树。相比之下,TensorFlow 2.0 executes eagerly(如正常使用 Python 一样)在 2.0 的版本中,其 graphs(抽象语法树)和 sessions 在实现的细节上应该是一样的。

不再有全局变量

TensorFlow 1.X 非常依赖于隐式全局命名空间。当你调用 tf.Variable 时,它会被放入默认图中,即使你忘记了指向它的 Python 变量它也会留在那里。这时,您可以恢复该 tf.Variable(),但前提是您得知道它已创建的名称。如果您无法控制变量的创建,很难做到这一点。因此,各种机制以及寻找用户创建变量的框架不断涌现,试图帮助用户再次找到他们的变量。

TensorFlow 2.0 取消了所有这些机制(Variables 2.0 RFC),支持默认机制:跟踪变量! 如果你不再用到某个 tf.Variable,它就会被回收。

Functions, not sessions

session.run() 的调用几乎类似于函数调用:指定输入和要调用的函数,然后返回一组输出。在 TensorFlow 2.0 中,您可以使用 tf.function() 来修饰 Python 函数以将其标记为 JIT( Just-In-Time )编译,以便 TensorFlow 将其作为单个图运行(Functions 2.0 RFC)。

这种机制使得 TensorFlow 2.0 拥有图模式的许多优点:

性能:该函数可以被优化,例如节点修剪,内核融合等

可移植性:该函数可以导出 / 重新导入(SavedModel 2.0 RFC),允许用户重用和将 TensorFlow 函数作为模块共享

# TensorFlow 1.X

outputs = session.run(f(placeholder), feed_dict={placeholder: input})# TensorFlow 2.0

outputs = f(input)

由于能够自由地穿插 Python 和 TensorFlow 代码,您能够充分利用 Python 的表现力。而且,可移植的 TensorFlow 在没有 Python 解释器的情况下也可执行。比如:mobile,C ++ 和 JS。避免用户在添加 @tf.function 时重写代码,AutoGraph 会将 Python 构造的一个子集转换成 TensorFlow 等价物。

TensorFlow 2.0 常用的建议

将代码重构为更小的函数

TensorFlow 1.X 中的常见使用模式是 “kitchen sink” 策略,即预先列出所有可能计算的并集,然后通过 session.run() 计算选定的张量。在 TensorFlow 2.0 中,用户应该根据需求将代码重构为更小的函数。通常情况下,没有必要用 tf.function 来修饰这些较小的函数;仅使用 tf.function 来修饰高级计算 — 例如,使用只有一个步骤的训练或使用模型的正向传递,将代码重构为更小的函数。

使用 Keras 层和模型来管理变量

Keras 模型和层提供了方便的变量和 trainable_variables 属性,以递归方式收集所有因变量。这使得本地化管理变量非常方便。

Keras 层 / 模型继承自 tf.train.Checkpointable 并与 @ tf.function 集成,这使得直接检查点或从 Keras 对象导出 SavedModel 成为可能。您不一定要使用 Keras 的 fit() API 来集成。

结合 tf.data.Datasets 和 @tf.function

在迭代适合内存的训练数据时,可以使用常规的 Python 循环。除此之外,tf.data.Dataset 则是从磁盘传输训练数据的最好方法。数据集是可迭代的(不是迭代器),工作方式与其他 Python 循环类似。如果您想使用 AutoGraph 的等效图操作替换 Python 循环,可以通过将代码包装在 tf.function() 中,充分利用数据集异步预取 / 流功能来实现。

@tf.function

def train(model, dataset, optimizer):

for x, y in dataset:

with tf.GradientTape() as tape:

prediction = model(x)

loss = loss_fn(prediction, y)

gradients = tape.gradients(loss, model.trainable_variables)

optimizer.apply_gradients(gradients, model.trainable_variables)

如果您使用 Keras.fit() API,则无需担心数据集迭代。

model.compile(optimizer=optimizer, loss=loss_fn)

model.fit(dataset)

利用 AutoGraph 和 Python 控制流程

AutoGraph 提供了一种将依赖于数据的控制流转换为图模式等价的方法,如 tf.cond 和 tf.while_loop。

数据相关控制流常见出现于序列模型中。tf.keras.layers.RNN 包装了 RNN 单元,允许您静态或动态地展开循环神经网络。为了演示,您可以重新实现动态展开,如下所示:

class DynamicRNN(tf.keras.Model):

def __init__(self, rnn_cell):

super(DynamicRNN, self).__init__(self)

self.cell = rnn_cell

def call(self, input_data):

# [batch, time, features] -> [time, batch, features]

input_data = tf.transpose(input_data, [1, 0, 2])

outputs = tf.TensorArray(tf.float32, input_data.shape[0])

state = self.cell.zero_state(input_data.shape[1], dtype=tf.float32)

for i in tf.range(input_data.shape[0]):

output, state = self.cell(input_data[i], state)

outputs = outputs.write(i, output)

return tf.transpose(outputs.stack(), [1, 0, 2]), state

使用 tf.metrics 聚合数据,使用 tf.summary 记录数据

一套完整的 tf.summary 接口即将发布。您可以使用以下命令访问 tf.summary 的 2.0 版本:

fromtensorflow.python.ops importsummary_ops_v2

有关详细信息,请参阅文末链接:

https://github.com/tensorflow/docs/blob/master/site/en/r2/guide/effective_tf2.md

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    3867

    浏览量

    61308
  • python
    +关注

    关注

    51

    文章

    4675

    浏览量

    83466
  • tensorflow
    +关注

    关注

    13

    文章

    313

    浏览量

    60242

原文标题:我们期待的TensorFlow 2.0还有哪些变化?

文章出处:【微信号:rgznai100,微信公众号:rgznai100】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C编程最佳实践.doc

    C编程最佳实践.doc
    发表于 08-17 14:37

    TensorFlow 20的这些变化你知道吗

    我们期待的TensorFlow 20还有哪些变化
    发表于 04-08 14:31

    最佳天线实践、布局指南以及天线调试程序

    有限的硬币型电池)获得的无线射程主要取决于天线的设计、塑料外壳以及良好的PCB布局。对于芯片和电源相同但布局和天线设计实践不同的系统,它们的RF(射频)范围变化超过50%也是正常的。本应用笔记介绍了
    发表于 05-21 08:51

    Dockerfile的最佳实践

    ”微服务一条龙“最佳指南-“最佳实践”篇:Dockerfile
    发表于 07-11 16:22

    变量声明最佳实践

    所以我们开始编写32位和16位代码,并过渡到MPLAB X和XC编译器。我想到的一个主题是声明变量的最佳实践。常规IpType。h或类型。h pr STDIN。或It8或字节char等任何想法,走哪条路?
    发表于 09-30 12:01

    解读最佳实践:倚天 710 ARM 芯片的 Python+AI 算力优化

    最佳实践现在介绍一下在 ARM 平台,特别是倚天 710 的用户,使用 TensorFlow 或 PyTorch 的最佳实践。要知道软件版
    发表于 12-23 16:02

    虚幻引擎的纹理最佳实践

    纹理是游戏不可或缺的一部分。 这是一个艺术家可以直接控制的领域,以提高游戏的性能。 本最佳实践指南介绍了几种纹理优化,这些优化可以帮助您的游戏运行得更流畅、看起来更好。 最佳实践系列指
    发表于 08-28 06:39

    深度学习的发展与应用,TensorFlow从研究到实践

    ,才能更好的促进行业交流,推动行业创新。Google 内部大规模使用 TensorFlow 来做研究和产品,而业界可以基于 Google 的实践和经验。
    的头像 发表于 06-05 11:00 4400次阅读

    TensorFlow2.0 版本将来临

    TensorFlow 2.0 的一部分,我们将停止分发 tf.contrib。我们将在未来几个月与 contrib 模块的所有者合作制定详细的迁移计划,包括如何在我们的社区页面和文档中宣传您的 TensorFlow 扩展。
    的头像 发表于 08-15 09:01 5293次阅读

    TensorFlow安装手册之如何利用pip安装 TensorFlow

    关于 TensorFlow 安装,有很多方法可以实践。本文将为大家详细介绍如何利用 pip 安装 TensorFlow
    的头像 发表于 10-28 10:57 1.3w次阅读

    机器学习框架Tensorflow 2.0的这些新设计你了解多少

    总是无法被撼动。而就在即将到来的2019年,Tensorflow 2.0将正式入场,给暗流涌动的框架之争再燃一把火。
    的头像 发表于 11-17 11:33 3001次阅读

    TensorFlow 2.0 将包含许多 API 变更

    此外,由于我们弃用了某些模块(例如 tf.flags 和 tf.contrib),您将无法通过切换至 compat.v1 来实现 TensorFlow 2.0 中的某些变更。升级使用这些模块的代码
    的头像 发表于 03-01 09:36 5352次阅读

    TensorFlow 2.0 alpha提供即将发生的变化的预览

    要快速上手 TensorFlow 2.0 Alpha 版,最佳途径是前往 TensorFlow 的新网站。您可以在 tensorflow.o
    的头像 发表于 03-10 10:17 2745次阅读

    轻松入门,高效成长: "TensorFlow 机器学习技能解锁季"

    体系,体验 TensorFlow最佳实践模式? 《 TensorFlow 入门实操课程》 带你零基础快速上手 想高效实践机器学习模型部署
    的头像 发表于 11-10 11:35 588次阅读

    SAN设计和最佳实践指南

    电子发烧友网站提供《SAN设计和最佳实践指南.pdf》资料免费下载
    发表于 09-01 11:02 0次下载
    SAN设计和<b class='flag-5'>最佳</b><b class='flag-5'>实践</b>指南