tf.while_loop - ValueError:这两个结构的元素数量不同

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tf.while_loop - ValueError:这两个结构的元素数量不同相关的知识,希望对你有一定的参考价值。

我正在尝试在Tensorflow中执行以下操作 -

import tensorflow as tf

graph = tf.Graph()

with graph.as_default():

    i = tf.Variable(0)
    sol = tf.Variable(0)

    def cond(i, sol):
        return tf.less(i, 2)
    def body(i, sol):
        i = tf.add(i, 1)
        sol = tf.add(sol, 1)
    tf.while_loop(cond, body, [i, sol])

with tf.Session(graph=graph) as session:
    tf.global_variables_initializer().run()

    result = session.run(sol, feed_dict={})
    print result

我得到的错误如下图所示。 enter image description here

我无法理解错误消息中的两个“结构”是什么。我想最终根据tf.Placeholder(上面代码中的'i')的值创建一个'tf.while_loop'和'condition'。

答案

你应该将return添加到body函数:

def body(i, sol):
    i = tf.add(i, 1)
    sol = tf.add(sol, 1)
    retrun [i, sol]

但我认为您还应该将代码更改为类似的代码

graph = tf.Graph()

with graph.as_default():
    i = tf.Variable(0)
    sol = tf.Variable(0)

    def cond(i, sol):
        return tf.less(i, 2)
    def body(i, sol):
        i = tf.add(i, 1)
        sol = tf.add(sol, 1)
        return [i, sol]
    result = tf.while_loop(cond, body, [i, sol])

with tf.Session(graph=graph) as session:
    tf.global_variables_initializer().run()

    result = session.run(result, feed_dict={})
    print(result[1])

因为tf.while只是图表中的节点,你应该运行它,否则你将得不到任何结果。

以上是关于tf.while_loop - ValueError:这两个结构的元素数量不同的主要内容,如果未能解决你的问题,请参考以下文章

tf.while_loop

tensorflow-tf.while_loop

没有为任何变量提供渐变来增加tf.while_loop中的Loss值

tf.while_loop - ValueError:这两个结构的元素数量不同

11 tensorflow在tf.while_loop循环(非一般循环)中使用操纵变量该怎么做

将输出序列化为 JSON - ValueError:检测到循环引用