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('<mark data-id="64cc669a-900a-449c-ac73-f71d0e91fc86" data-type="technologies">Tensor</mark>Flow 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 核心。

• ### 实践才能有财富，十年结弦，一生悬命

1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责；
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性，不作出任何保证或承若；
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。