您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    我们等候的TensorFlow 2.0还有哪些变化?
    时间:2019-02-18 21:05 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    我们等候的TensorFlow 2.0还有哪些变化?

    为提高 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 版本:

    from tensorflow.python.ops import summary_ops_v2

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

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

    【编辑引荐】

    Uber 宣布开源 AI 工具箱,免代码训练和测试学习模型

    机器学习准入门槛降低,机器学习工程师职位或将消逝

    谷歌开源 ClusterFuzz,自动化查找并修复 bug

    2018年阿里巴巴开源的那些超牛的Java项目汇总

    奠基互联网基础的开源项目如何可继续开展

    (责任编辑:admin)