2016-06-22 16 views
8

Zastanawiałem O czym różnice między 2 następujące elementy kodu:O „tensorflow.initialize_all_variables()”

import tensorflow as tf 
x = tf.Variable(0, name='x') 
model = tf.initialize_all_variables() 
with tf.Session() as session: 
    for i in range(5): 

     session.run(model) 
     x = x + 1 

     print(session.run(x)) 

import tensorflow as tf 
x = tf.Variable(0, name='x') 
model = tf.initialize_all_variables() 
with tf.Session() as session: 
    for i in range(5): 

     x = x + 1 
     session.run(model) 

     print(session.run(x)) 

Jedyną różnicą jest to rozkaz „X = x + 1 "i" session.run (model) ". Pomyślałem, że to spowoduje dużą różnicę w wynikach, ponieważ session.run (model) zainicjuje wszystkie zmienne. Jednak te dwa bloki kodu wyjścia te same rzeczy ...

Kod jest kopiowany z samouczka: http://learningtensorflow.com/lesson2/

Odpowiedz

11

Tak, to trochę skomplikowane tutaj. Ważną koncepcją Tensorflow jest leniwa ocena, co oznacza, że ​​najpierw tworzony jest wykres węzłów Tensorflow, a ocena wykresu odbywa się tylko w sesji session.run.

Dla tego wiersza kodu x = x + 1, x tutaj jest typu Tensor, a + tutaj jest przeciążony tf.add, więc x = x + 1 faktycznie buduje wykres, nie ma jeszcze żadnych obliczeń ; i przy każdej iteracji, wykres (drzewo binarne w tym przypadku) jest dodawany z jeszcze jedną warstwą (jeszcze jedna zagnieżdżona suma). session.run (model) zawsze inicjalizuje x na 0, session.run (x) będzie obliczał x na podstawie wykresu skonstruowanego do tej pory w tej iteracji. Na przykład w iteracji 4, x jest dodawana 1 przez 4 razy, ponieważ wykres w tej iteracji ma 4 zagnieżdżone sumy (lub warstwy).

Jeśli ma to dla ciebie sens, myślę, że "oba kody są w zasadzie takie same" również będą miały sens.

Uwaga: ściśle mówiąc, w pierwszej iteracji x na prawej stronie jest typ zmiennej, ale są to dane, nie jest głównym punktem usiłuję zrobić ...

+0

widzę ... Dziękuję Ci bardzo! – Qihong

Powiązane problemy