我是tensorflow的新手,我试图编写一个tensorflow程序,它递归地计算斐波纳契数。下面的程序是我最后得到的,但是它失败了,有很多我不明白的错误。有人能帮我理解我做错了什么,以及如何解决它吗。这是我的计划:
import tensorflow as tf
tf.logging.set_verbosity(tf.logging.ERROR)
with tf.Graph().as_default() as g:
fib_seed_0 = tf.Variable(0, name = "fib_seed_0")
fib_seed_1 = tf.Variable(1, name = "fib_seed_1")
def fib(n):
return tf.cond(tf.equal(n, fib_seed_0), lambda: tf.identity(n),
lambda: tf.cond(tf.equal(n, fib_seed_1), lambda: tf.identity(n),
lambda: tf.add(fib(tf.subtract(n, 1)), fib(tf.subtract(n, 2)))))
fib_to_calc = tf.Variable(5, name = "fib_to_calc")
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
print(sess.run(fib(fib_to_calc)))
下面是上述tensorflow程序在python翻译中要做的事情:
^{pr2}$下面是一个错误日志示例。它一直在说:
Traceback (most recent call last):
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 1775, in cond
return merges[0] if len(merges) == 1 else merges
File "C:\IronKey\DeveloperTools\Anaconda3\lib\contextlib.py", line 77, in __exit__
self.gen.throw(type, value, traceback)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 4169, in name_scope
yield scope
File "C:\IronKey\DeveloperTools\Anaconda3\lib\contextlib.py", line 77, in __exit__
self.gen.throw(type, value, traceback)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 3625, in get_controller
yield default
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 4169, in name_scope
yield scope
File "C:\IronKey\DeveloperTools\Anaconda3\lib\contextlib.py", line 77, in __exit__
self.gen.throw(type, value, traceback)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 2860, in name_scope
yield "" if new_stack is None else new_stack + "/"
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 4169, in name_scope
yield scope
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 1748, in cond
_, res_f = context_f.BuildCondBranch(fn2)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 1642, in BuildCondBranch
r = fn()
File "fib.py", line 13, in <lambda>
lambda: tf.add(fib(tf.subtract(n, 1)), fib(tf.subtract(n, 2)))))
File "fib.py", line 12, in fib
lambda: tf.cond(tf.equal(n, fib_seed_1), lambda: tf.identity(n),
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 1775, in cond
return merges[0] if len(merges) == 1 else merges
File "C:\IronKey\DeveloperTools\Anaconda3\lib\contextlib.py", line 77, in __exit__
self.gen.throw(type, value, traceback)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 4169, in name_scope
yield scope
File "C:\IronKey\DeveloperTools\Anaconda3\lib\contextlib.py", line 77, in __exit__
self.gen.throw(type, value, traceback)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 3625, in get_controller
yield default
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 4169, in name_scope
yield scope
File "C:\IronKey\DeveloperTools\Anaconda3\lib\contextlib.py", line 77, in __exit__
self.gen.throw(type, value, traceback)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 2860, in name_scope
yield "" if new_stack is None else new_stack + "/"
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 4169, in name_scope
yield scope
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 1748, in cond
_, res_f = context_f.BuildCondBranch(fn2)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 1642, in BuildCondBranch
。。。 上述错误重复多次,然后出现以下错误 ... 在
r = fn()
File "fib.py", line 12, in <lambda>
lambda: tf.cond(tf.equal(n, fib_seed_1), lambda: tf.identity(n),
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\ops\gen_array_ops.py", line 1343, in identity
result = _op_def_lib.apply_op("Identity", input=input, name=name)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\op_def_library.py", line 777, in apply_op
return op
File "C:\IronKey\DeveloperTools\Anaconda3\lib\contextlib.py", line 77, in __exit__
self.gen.throw(type, value, traceback)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 3625, in get_controller
yield default
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\op_def_library.py", line 777, in apply_op
return op
File "C:\IronKey\DeveloperTools\Anaconda3\lib\contextlib.py", line 77, in __exit__
self.gen.throw(type, value, traceback)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 4169, in name_scope
yield scope
File "C:\IronKey\DeveloperTools\Anaconda3\lib\contextlib.py", line 77, in __exit__
self.gen.throw(type, value, traceback)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 3625, in get_controller
yield default
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 4169, in name_scope
yield scope
File "C:\IronKey\DeveloperTools\Anaconda3\lib\contextlib.py", line 77, in __exit__
self.gen.throw(type, value, traceback)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 2860, in name_scope
yield "" if new_stack is None else new_stack + "/"
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 4169, in name_scope
yield scope
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\op_def_library.py", line 777, in apply_op
return op
File "C:\IronKey\DeveloperTools\Anaconda3\lib\contextlib.py", line 77, in __exit__
self.gen.throw(type, value, traceback)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\op_def_library.py", line 255, in _MaybeColocateWith
yield
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\op_def_library.py", line 768, in apply_op
op_def=op_def)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 2336, in create_op
original_op=self._default_original_op, op_def=op_def)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 1232, in __init__
self._control_flow_context.AddOp(self)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 1598, in AddOp
self._AddOpInternal(op)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 1613, in _AddOpInternal
real_x = self.AddValue(x)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 1587, in AddValue
result = _SwitchRefOrTensor(result, self._pred)[self._branch]
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 364, in _SwitchRefOrTensor
return switch(data, pred, name=name)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\contextlib.py", line 77, in __exit__
self.gen.throw(type, value, traceback)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 2974, in colocate_with
yield
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 364, in _SwitchRefOrTensor
return switch(data, pred, name=name)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 320, in switch
sparse_tensor.SparseTensor(ind_t, val_t, dense_shape_t))
File "C:\IronKey\DeveloperTools\Anaconda3\lib\contextlib.py", line 77, in __exit__
self.gen.throw(type, value, traceback)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 4169, in name_scope
yield scope
File "C:\IronKey\DeveloperTools\Anaconda3\lib\contextlib.py", line 77, in __exit__
self.gen.throw(type, value, traceback)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 3625, in get_controller
yield default
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 4169, in name_scope
yield scope
File "C:\IronKey\DeveloperTools\Anaconda3\lib\contextlib.py", line 77, in __exit__
self.gen.throw(type, value, traceback)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 2860, in name_scope
yield "" if new_stack is None else new_stack + "/"
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 4169, in name_scope
yield scope
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 299, in switch
return gen_control_flow_ops._switch(data, pred, name=name)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\ops\gen_control_flow_ops.py", line 371, in _switch
result = _op_def_lib.apply_op("Switch", data=data, pred=pred, name=name)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\op_def_library.py", line 777, in apply_op
return op
File "C:\IronKey\DeveloperTools\Anaconda3\lib\contextlib.py", line 77, in __exit__
self.gen.throw(type, value, traceback)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 3625, in get_controller
yield default
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\op_def_library.py", line 777, in apply_op
return op
File "C:\IronKey\DeveloperTools\Anaconda3\lib\contextlib.py", line 77, in __exit__
self.gen.throw(type, value, traceback)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 4169, in name_scope
yield scope
File "C:\IronKey\DeveloperTools\Anaconda3\lib\contextlib.py", line 77, in __exit__
self.gen.throw(type, value, traceback)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 3625, in get_controller
yield default
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 4169, in name_scope
yield scope
File "C:\IronKey\DeveloperTools\Anaconda3\lib\contextlib.py", line 77, in __exit__
self.gen.throw(type, value, traceback)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 2860, in name_scope
yield "" if new_stack is None else new_stack + "/"
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 4169, in name_scope
yield scope
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\op_def_library.py", line 777, in apply_op
return op
File "C:\IronKey\DeveloperTools\Anaconda3\lib\contextlib.py", line 77, in __exit__
self.gen.throw(type, value, traceback)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\op_def_library.py", line 255, in _MaybeColocateWith
yield
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\op_def_library.py", line 768, in apply_op
op_def=op_def)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 2336, in create_op
original_op=self._default_original_op, op_def=op_def)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 1180, in __init__
if node_def.ByteSize() >= (1 << 31) or node_def.ByteSize() < 0:
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\google\protobuf\internal\python_message.py", line 1012, in ByteSize
size += field_descriptor._sizer(field_value)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\google\protobuf\internal\encoder.py", line 359, in FieldSize
entry_msg = message_type._concrete_class(key=key, value=value)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\google\protobuf\internal\python_message.py", line 511, in init
copy = field._default_constructor(self)
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\google\protobuf\internal\python_message.py", line 423, in MakeSubMessageDefault
result = message_type._concrete_class()
File "C:\IronKey\DeveloperTools\Anaconda3\lib\site-packages\google\protobuf\internal\python_message.py", line 480, in init
self._listener_for_children = _Listener(self)
RecursionError: maximum recursion depth exceeded
TensorFlow不支持对^{} 的递归调用,因为它的实现急切地调用为这两个分支传递的两个
lambda
函数中的每一个(以构建符号图),并且在构建图时不知道终止条件,因此它将递归,直到堆栈空间用完为止。在对于在TensorFlow中定义(可能是递归的)函数有实验支持,使用目前不属于公共API的^{} 库。对递归函数的支持是基本的,但是您可以使用显式的forward声明定义一个函数,如下所示:
当然,使用^{} 的迭代解决方案会更加有效!在
相关问题 更多 >
编程相关推荐