gpt4 book ai didi

python - 在控制流和条件语句中使用张量

转载 作者:行者123 更新时间:2023-12-01 04:11:52 24 4
gpt4 key购买 nike

我感兴趣如何在控制流语句中使用张量(没有 session )。

<小时/>

我的意思的一个例子是:

myTensor = tf.where(myOtherTensor) # shape == [None, 2]
numLoops = tf.shape(myTensor)[0] # Results in tensor of shape [1]
for i in xrange(numLoops):
# ...

我可以将 numLoops (张量)传递给 xrange() 吗?如果没有,还有其他方法吗?

<小时/>

另一个例子是:

myTensor = tf.in_top_k(myOtherTensor1, myOtherTensor2, 5) # Tensor of bools
myCondition = myTensor[0] # Results in tensor of shape [1] of type bool
if myCondition:
# ...
<小时/>

我的问题:张量(没有特定 session )可以按照上述方式使用吗?

如果我有一个 session ,我可以简单地评估这些单元素张量,然后使用它们。如果我直到运行时才知 Prop 体值,则必须有一种方法来使用这些值。

我可以预见的问题:也许循环会使生成图表变得不可能,因为您不知道所包含的操作将执行多少次?但存储循环的操作并在运行时简单地应用它们正确的次数似乎是微不足道的。

如果有任何不清楚的地方,请告诉我,我将提供更多详细信息。

最佳答案

TensorFlow 在 the tensorflow.python.ops.control_flow_ops module 中包含对图内控制流的实验支持。 (注意这些操作的接口(interface)可能会发生变化!使用风险自负!)

<小时/>

有条件支持(您的第二种情况)将出现在下一个版本中,并且最近已添加到公共(public) API 中(如果您从源代码构建)。它目前在 TensorFlow 附带的一些库中使用,例如 RNN cell (当序列长度已知时,使用它来提前停止)。

tf.cond()运算符采用一个 bool 张量(充当谓词)和两个 lambda 表达式;并返回一个或多个值。

你的程序看起来像这样:

if_true = lambda: ...  # Value to return if `myCondition` is true
if_false = lambda: ... # Value to return if `myCondition` is false

result = tf.cond(myCondition, if_true, if_false)
<小时/>

迭代(您的第一个案例)可以使用While()来处理高阶运算符。本质上,您可以将程序编写为(伪代码):

i = 0
while i < tf.rank(myTensor):
# ...

...大约可以表示为:

from tensorflow.python.ops import control_flow_ops as cfo

i = tf.constant(0)
condition = lambda i: tf.less(i, tf.rank(myTensor))
body = lambda x: ...
inital_accumulator = ... # will be bound to `x` in first iteration of `body`.

# `result` will contain the value returned from the final iteration of `body`.
result = cfo.While(condition, body, [initial_accumulator])

请注意,While() 运算符要求您为所有循环变量指定初始值(在本例中仅为 initial_accumulator)。循环常量将像普通 Python lambda 中一样被捕获。

关于python - 在控制流和条件语句中使用张量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34817456/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com