2015-11-09 8 views

Antwort

154

Wenn Sie eine Tensor t haben, entspricht der Aufruf t.eval() dem Aufruf tf.get_default_session().run(t).

Sie eine Sitzung die Standard machen können wie folgt:

t = tf.constant(42.0) 
sess = tf.Session() 
with sess.as_default(): # or `with sess:` to close on exit 
    assert sess is tf.get_default_session() 
    assert t.eval() == sess.run(t) 

Der wichtigste Unterschied ist, dass Sie sess.run() können die Werte vieler Tensoren im gleichen Schritt zu holen:

t = tf.constant(42.0) 
u = tf.constant(37.0) 
tu = tf.mul(t, u) 
ut = tf.mul(u, t) 
with sess.as_default(): 
    tu.eval() # runs one step 
    ut.eval() # runs one step 
    sess.run([tu, ut]) # evaluates both tensors in a single step 

Beachten Sie, dass bei jedem Aufruf von eval und run der gesamte Graph von Grund auf neu ausgeführt wird. Um das Ergebnis einer Berechnung zwischenzuspeichern, weisen Sie es einer tf.Variable zu.

+2

Ist es irgendwie möglich, eine füttern Platzhalter? ([meine Frage] (http://stackoverflow.com/questions/33810990/how-to-feed-a-placeholder)) – displayname

+0

Was ist das andere im zweiten Beispiel? Ist es nur, dass Sie bewerten können, um Operationen zu trennen (oder Graphen? Nicht sicher, was der Unterschied ist)? – Pinocchio

+1

warte, läuft dein Beispiel tatsächlich? Ich versuchte: 'a = tf.constant (2.0) b = tf.constant (3.0) ab = tf.matmul (a, b)' und ich habe gerade Beschwerden von Tensorflow, dass die Formen nicht übereinstimmen, denke ich genauer gesagt, dass der Rang mindestens 2 sein muss. – Pinocchio

28

Die FAQ-Sitzung zum Tensorfluss hat eine answer to exactly the same question. Ich würde einfach weiter und lassen Sie es hier:


Wenn t ein Tensor Objekt ist, t.eval() ist eine Abkürzung für sess.run(t) (wo sess die aktuelle Standard-Sitzung ist den beiden folgenden Code-Schnipsel sind äquivalent:.

sess = tf.Session() 
c = tf.constant(5.0) 
print sess.run(c) 

c = tf.constant(5.0) 
with tf.Session(): 
    print c.eval() 

Im zweiten Beispiel fungiert die Sitzung als ein Kontextmanager, der bewirkt, dass er als Standardsitzung für die Lebensdauer des with-Blocks installiert wird.Der Kontextmanager-Ansatz kann zu präziseren Code für einfache Anwendungsfälle führen (wie Unit-Tests), wenn dein Code witzig ist h mehrere Grafiken und Sitzungen, kann es einfacher sein, explizite Aufrufe an Session.run().

Ich würde Ihnen empfehlen, zumindest die gesamte FAQ zu überfliegen, da dies viele Dinge klären könnte.

1

eval() nicht verarbeiten kann die Liste Objekt

tf.reset_default_graph() 

a = tf.Variable(0.2, name="a") 
b = tf.Variable(0.3, name="b") 
z = tf.constant(0.0, name="z0") 
for i in range(100): 
    z=a*tf.cos(z+i)+z*tf.sin(b-i) 
grad=tf.gradients(z,[a,b]) 

init=tf.global_variables_initializer() 

with tf.Session() as sess: 
    init.run() 
    print("z:",z.eval()) 
    print("grad",grad.eval()) 

aber Session.run() kann

print("grad",sess.run(grad)) 

korrigiert mich wenn ich falsch bin