# AutoGraph

```1def huber_loss(a):
2  if tf.abs(a) <= delta:
3    loss = a * a / 2
4  else:
5    loss = delta * (tf.abs(a) - delta / 2)
6  return loss```

```1@autograph.convert()
2def huber_loss(a):
3  if tf.abs(a) <= delta:
4    loss = a * a / 2
5  else:
6    loss = delta * (tf.abs(a) - delta / 2)
7  return loss```

``` 1def tf__huber_loss(a):
2  with tf.name_scope('huber_loss'):
3
4    def if_true():
5      with tf.name_scope('if_true'):
6        loss = a * a / 2
7        return loss,
8
9    def if_false():
10      with tf.name_scope('if_false'):
11        loss = delta * (tf.abs(a) - delta / 2)
12        return loss,
13    loss = ag__.utils.run_cond(tf.less_equal(tf.abs(a), delta), if_true,
14        if_false)
15    return loss```

```1with tf.Graph().as_default():
2  x_tensor = tf.constant(9.0)
3
4  # The converted function works like a regular op: tensors in, tensors out.
5  huber_loss_tensor = huber_loss(x_tensor)
6
7  with tf.Session() as sess:
8    print('TensorFlow result: %2.2f\n' % sess.run(huber_loss_tensor))```

AutoGraph不仅仅是一组有用的宏; 它使用源代码转换来Python的任何部分，包括控制流、函数应用程序和赋值、生成样板代码、以及重构常用的Python代码使其容易转换为计算图。

# 可运行的例子

``` 1def collatz(a):
2    counter = 0
3    while a != 1:
4        if a % 2 == 0:
5            a = a // 2
6        else:
7            a = 3 * a + 1
8        counter = counter + 1
9    return counter
10
11graph_mode_collatz = autograph.to_graph(collatz)
12# The code is human-readable, too
13print(autograph.to_code(collatz))
14
15collatz_tensor = graph_mode_collatz(tf.constant(n))```

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

```1def f(n):
2  if n >= 0:
3    while n < 5:
4      n += 1
5      print(n)
6  return n```

AutoGraph允许您将元素追加到循环内的数组中，可以通过使用一些AutoGraph助手，比如set_element_type和stack来实现。

``` 1def f(n):
2  z = []
3  # We ask you to tell us the element dtype of the list
4  autograph.set_element_type(z, tf.int32)
5  for i in range(n):
6    z.append(i)
7  # when you're done with the list, stack it
8  # (this is just like np.stack)
9  return autograph.stack(z)
10view raw```

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

# 传送门

AutoGraph：https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/autograph

0 条评论

• ### OpenAI创始人要自杀献身科学？别瞎说，人家是支持大脑上传

Sam Altman既是OpenAI的创始人，也是硅谷著名Y Combinator创业孵化器的创始人。

• ### 体积减半画质翻倍，他用TensorFlow实现了这个图像极度压缩模型

就有这么一种基于生成式对抗网络（GAN）的极度图像压缩框架，经它之手的图像虽然体积被压缩不少，但分辨率着实感人。和同类框架相比，它的效果尤为惊艳。

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

作者：Alex Wiltschko、Dan Moldovan、Wolff Dobson

• ### 浪尖，请问如何确定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...