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

Ich versuche, dieses https://github.com/kvfrans/twitch/blob/master/sample.py#L45 Beispiel zu folgen ein geschultes tensorflow Modell zu entschlüsseln und laufen, aber es scheint, wie der tensorflow Code verwendet wurde, war eine ältere Version. Ich habe es geschafft die meisten Anrufe v 1.0.0 zu beheben, aber ich stecke, wo der Code Zeile mir oben gibt den folgenden Fehler:Tensorflow: Attribute: ‚tuple‘ Objekt hat kein Attribut ‚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' 

Irgendwelche Ideen, wie ich die .eval() und state beheben sollte? Es wird verwendet, später in:

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

Antwort

3

Die .eval() method ist nur auf tf.Tensor implementiert, aber wie andere haben o Observiert, gibt die cell.zero_state()-Methode ein Objekt tuple zurück.

Die tf.Session.run() Methode versteht, wie Tupel auszupacken und tf.Tensor.eval() ist nur eine bequeme Wrapper für tf.Session.run() auf einem einzigen Tensor im "default" session aufrufen. Mit dieser Beobachtung können Sie diese Zeile wechseln:

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

... mit den folgenden:

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

Das hat funktioniert, vielen Dank! – Blizzard

1

Von 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 .

, die die Fehlermeldung erklärt Sie erhalten (nicht .eval() auf einem tuple nennen kann).

+0

Ich kann nicht schalten Sie den 'state_is_tuple = false', wie würden Sie empfehlen es zu reparieren? – Blizzard

+0

@Blizzard Wählen Sie das Element des Tupels, das Sie interessiert, und führen Sie eval darauf aus. –

+0

Das macht Sinn, danke! – Blizzard

2

Sie können Eval auf Python-Objekte nicht ausführen - Tupel in diesem Fall.

Eine Option könnte sein, das Python-Objekt zu konvertieren erste Tensor:

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

zu:

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

Sobald es ein Tensor ist, Sie eval es mit:

state.eval() 
+0

Es kommt mit diesem zurück: 'ValueError: Konnte Wörterbuch nicht abflachen. Der Schlüssel hatte 4 Elemente, aber der Wert hatte 1 Elemente. Schlüssel: [, , , ], Wert: []. ' – Blizzard

Verwandte Themen