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})
答案 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:
LSTMCell
,BasicLSTMCell
和MultiRNNCell
构造函数现在默认为state_is_tuple = True。要在转换到新默认值时快速修复,只需传递参数state_is_tuple=False
。
这解释了您收到的错误消息(您无法在.eval()
上致电tuple
)。