2017-03-08 61 views
3
state = cell.zero_state(batchsize, tf.float32).eval() 

我想按照這個https://github.com/kvfrans/twitch/blob/master/sample.py#L45例如解碼和運行一個訓練有素的tensorflow模型,但它似乎是使用了舊版本的tensorflow代碼。我已成功地修復大多數呼叫到v 1.0.0,但我被困在那裏上面的代碼行給了我以下錯誤:Tensorflow:AttributeError的:「元組」對象有沒有屬性「的eval」

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

.eval() method僅在tf.Tensor上實施,但其他人有o保留,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)) 
+0

這工作,非常感謝你! – Blizzard

1

TensorFlow Release 1.0.0 notes

LSTMCell , BasicLSTMCell , and MultiRNNCell constructors now default to state_is_tuple=True. For a quick fix while transitioning to the new default, simply pass the argument state_is_tuple=False .

,說明您收到錯誤信息(你不能叫一個tuple.eval())。

+0

我不能把'state_is_tuple = FALSE',你會怎麼推薦修復它? – Blizzard

+0

@Blizzard選擇你感興趣的元組元素並在其上運行eval。 –

+0

這很有道理,謝謝! – Blizzard

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() 
+0

它以此返回:'ValueError:無法拼合字典。鑰匙有4個元素,但值有1個元素。 Key:[],value:[]。' – Blizzard