加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

我们等候的TensorFlow 2.0尚有哪些变革?

发布时间:2019-02-20 17:36:53 所属栏目:建站 来源:佚名
导读:为进步 TensorFlow 的事变服从,TensorFlow 2.0 举办了多项变动,包罗删除了多余的 API,使API 越发同等同一,譬喻同一的 RNNs (轮回神经收集),同一的优化器,而且Python 运行时更好地集成了 Eager execution 。 很多 RFC 已经对 TensorFlow 2.0 的这些
副问题[/!--empirenews.page--]

 我们等候的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

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读