Tensorflow:AttributeError:'tuple'对象没有属性'eval'

时间:2017-03-08 17:13:16

标签: python machine-learning tensorflow

state = cell.zero_state(batchsize, tf.float32).eval()

我正在尝试按照此https://github.com/kvfrans/twitch/blob/master/sample.py#L45示例来解码并运行经过训练的张量流模型,但似乎使用的张量流代码是旧版本。我已设法修复大多数调用v 1.0.0,但我卡在上面的代码行给我以下错误:

Traceback (most recent call last):
  File "server.py", line 1, in <module>
    from sample import *
  File "/home/user/twitch/sample.py", line 75, in <module>
    print predict("this game is")
  File "/home/user/twitch/sample.py", line 46, in predict
    state = initialstate.eval()
AttributeError: 'tuple' object has no attribute 'eval'

关于如何修复.eval()state的任何想法?它稍后用于:

guessed_logits, state = sess.run([logits, final_state], feed_dict={input_data: primer, initialstate: state})

3 个答案:

答案 0 :(得分:3)

.eval() method仅在tf.Tensor上实施,但正如其他人观察到的那样,cell.zero_state()方法会返回tuple个对象。

tf.Session.run()方法了解如何解包元组,而tf.Tensor.eval()只是在"default" session中单个张量上调用tf.Session.run()的方便包装器。使用此观察,您可以切换此行:

state = cell.zero_state(batchsize, tf.float32).eval()

......以下内容:

state = tf.get_default_session().run(cell.zero_state(batchsize, tf.float32))

答案 1 :(得分:2)

你不能在Python对象上运行eval - 在这种情况下是元组。

一个选项可能是首先将Python对象转换为张量:

state = cell.zero_state(batchsize, tf.float32).eval()

为:

state = tf.convert_to_tensor(cell.zero_state(batchsize, tf.float32))

一旦它是张量,你eval用:

state.eval()

答案 2 :(得分:1)

来自TensorFlow Release 1.0.0 notes

  

LSTMCellBasicLSTMCellMultiRNNCell构造函数现在默认为state_is_tuple = True。要在转换到新默认值时快速修复,只需传递参数state_is_tuple=False

这解释了您收到的错误消息(您无法在.eval()上致电tuple)。