# TensorFlow发布重要更新AutoGraph，自动将Python转化为TF计算图

def huber_loss(a):
if tf.abs(a) <= delta:
loss = a * a / 2
else:
loss = delta * (tf.abs(a) - delta / 2)
return loss

@autograph.convert()
def huber_loss(a):
if tf.abs(a) <= delta:
loss = a * a / 2
else:
loss = delta * (tf.abs(a) - delta / 2)
return loss

def tf__huber_loss(a):
with tf.name_scope('huber_loss'):

def if_true():
with tf.name_scope('if_true'):
loss = a * a / 2
return loss,

def if_false():
with tf.name_scope('if_false'):
loss = delta * (tf.abs(a) - delta / 2)
return loss,
loss = ag__.utils.run_cond(tf.less_equal(tf.abs(a), delta), if_true,
if_false)
return loss

with tf.Graph().as_default():
x_tensor = tf.constant(9.0)

# The converted function works like a regular op: tensors in, tensors out.
huber_loss_tensor = huber_loss(x_tensor)

with tf.Session() as sess:
print('TensorFlow result: %2.2f\n' % sess.run(huber_loss_tensor))

AutoGraph 不只是有用宏命令的集合，它还可以使用源代码转换来覆写 Python 语言的任意部分，包括控制流、函数应用和分配，生成样板代码，重构惯用 Python，以使转换成图的过程变得简单。

GitHub：https://github.com/tensorflow/models/blob/master/samples/core/guide/autograph.ipynb

def collatz(a):
counter = 0
while a != 1:
if a % 2 == 0:
a = a // 2
else:
a = 3 * a + 1
counter = counter + 1
return counter

graph_mode_collatz = autograph.to_graph(collatz)
# The code is human-readable, too
print(autograph.to_code(collatz))

collatz_tensor = graph_mode_collatz(tf.constant(n))

AutoGraph 可以支持任意的嵌套控制流，例如：

def f(n):
if n >= 0:
while n < 5:
n += 1
print(n)
return n

AutoGraph 允许你在循环中添加元素到数组中。为了让其工作，我们使用一些 AutoGraph 辅助工具，set_element_type 和 stack。

def f(n):
z = []
# We ask you to tell us the element dtype of the list
autograph.set_element_type(z, tf.int32)
for i in range(n):
z.append(i)
# when you're done with the list, stack it
# (this is just like np.stack)
return autograph.stack(z)

def f(x):
assert x != 0, 'Do not pass zero!'
return x * x

AutoGraph 打开了构建和训练模型的新思路。谷歌在未来将基于开发者社区建议尝试添加更多的功能到 AutoGraph 上，请提出你的建议吧！

Graph Performance 对比 Eager Execution

Eager Execution 相当合用，但图更快。尽管对比基准较为复杂（由应用以及硬件配置决定），但在一些简单示例中我们可以看到，当从 Eager 转换到 AutoGraph 代码时有极大的加速，使用了大量 if 和 while 等语句。

AutoGraph 和 Eager Execution

AutoGraph 能够让你轻松的建立在 TensorFlow 图中轻松运行的直观性、复杂模型。这是目前在 contrib 中运行的实验性工具，但我们期望能够尽快把它加入到 TensorFlow 核心模块。

0 条评论

• ### TensorFlow bug激怒社区，用户：我要用PyTorch了！

issue 页面：https://github.com/tensorflow/tensorflow/issues/25175

• ### Keras vs PyTorch，哪一个更适合做深度学习？

深度学习有很多框架和库。这篇文章对两个流行库 Keras 和 Pytorch 进行了对比，因为二者都很容易上手，初学者能够轻松掌握。

• ### JAXnet：一行代码定义计算图，兼容三大主流框架，可GPU加速

项目地址：https://github.com/JuliusKunze/jaxnet

• ### TensorFlow新功能「AutoGraph」：将Python转换为计算图

昨天，TensorFlow推出了一个新功能「AutoGraph」，可以将Python代码（包括控制流print()和其他Python原生特性）转换为Tensor...

• ### 浪尖，请问如何确定hive分桶数？

顺便打个广告，更多优质文章和问题答疑及视频教程请点击原文链接，加入浪尖知识星球-Spark技术学院获取。

• ### View,ViewGroup的Touch事件的分发机制

ViewGroup的事件分发机制 我们用手指去触摸Android手机屏幕，就会产生一个触摸事件，但是这个触摸事件在底层是怎么分发的呢？这个我还真不知道，这里...

• ### NodeJS人脸识别(2)

上一篇介绍了NodeJS实现人脸识别中的人脸注册，搜索，检测功能。可以看到其实抛开用户量不说，其实任何想要实现的功能最终用NodeJS都是可以实现的。今天我们来...

• ### R for data science （第一章）①Chapter1 使用ggplot2进行数据可视化

本章将教您如何使用ggplot2可视化您的数据。 R有几个用于制作图形的系统，但ggplot2是最优雅和最通用的系统之一。 ggplot2实现了图形语法，它是一...

• ### 基于 Go 语言开发在线论坛（二）：通过模型类与MySQL数据库交互

在这篇教程中，我们将在 MySQL 中创建一个 chitchat 数据库作为论坛项目的数据库，然后在 Go 项目中编写模型类与之进行交互。你可以本地安装 MyS...