gau*_*clb 6 machine-learning control-flow tensorflow
的merge和switch可能不开放使用一般用户。并且我搜索了源代码:
在中有一个描述merge:
返回的可用元素的值
inputs。
可用意味着什么?归还switch吗?这是一个演示:
from tensorflow.python.ops import control_flow_ops
x_0, x_1 = control_flow_ops.switch(tf.constant(2), False)
x_2, x_3 = control_flow_ops.switch(tf.constant(7), True)
y = control_flow_ops.merge([x_0, x_1, x_2, x_3])
with tf.Session() as sess:
print(sess.run(y))
Run Code Online (Sandbox Code Playgroud)
switch让我们从检查control_flow_ops.switch功能开始:
x_0, x_1 = control_flow_ops.switch(tf.constant(2), False)
x_2, x_3 = control_flow_ops.switch(tf.constant(7), True)
with tf.Session() as sess:
print(sess.run(x_0)) # prints 2
print(sess.run(x_3)) # prints 7
Run Code Online (Sandbox Code Playgroud)
control_flow_ops.switch返回一个张量元组,但其中只有一个将具有值(取决于条件参数)。在上面的示例中,它x_0 = 2来自第一个switch和x_3 = 7第二个。尝试评估x_1或x_2将导致Retval的尝试没有值错误:
sess.run(x_1) # FAILS!
sess.run(x_2) # FAILS!
Run Code Online (Sandbox Code Playgroud)
换句话说,x_0并且x_3是可用的,同时x_1还是x_2不是。
mergecontrol_flow_ops.merge执行逆运算:给定张量元组,它选择可用的张量。精确地,它返回["output", "value_index"]具有值的张量的命名元组。根据当前文档,输入应仅包含一个可用的张量,这意味着您的演示严格来说不受支持,并导致不确定的行为。这是一个例子:
with tf.Session() as sess:
print(sess.run(merge([x_0, x_1]))) # Merge(output=2, value_index=0)
print(sess.run(merge([x_1, x_0]))) # Merge(output=2, value_index=1)
print(sess.run(merge([x_2, x_3]))) # Merge(output=7, value_index=1)
print(sess.run(merge([x_3, x_2]))) # Merge(output=7, value_index=0)
print(sess.run(merge([x_0, x_1, x_2]))) # Merge(output=2, value_index=0)
print(sess.run(merge([x_1, x_2, x_3]))) # Merge(output=7, value_index=2)
Run Code Online (Sandbox Code Playgroud)
这两个函数都可以方便地控制计算流程,例如,control_flow_ops.switch通过switch自身实现梯度(张量流源代码)。
| 归档时间: |
|
| 查看次数: |
1993 次 |
| 最近记录: |