Was ist der Unterschied zwischen tf.Session () und tf.InteractiveSession ()?

72

In welchen Fällen sollte tf.Session()und tf.InteractiveSession()zu welchem ​​Zweck in Betracht gezogen werden?

Als ich versuchte, die erstere zu verwenden, funktionierten einige Funktionen (zum Beispiel .eval()) nicht, und als ich zur späteren wechselte, funktionierte es.

RDK
quelle

Antworten:

75

Hauptsächlich aus offiziellen Unterlagen entnommen :

Der einzige Unterschied zu einer regulären Sitzung besteht darin, dass sich eine InteractiveSession beim Erstellen als Standardsitzung installiert. Die Methoden Tensor.eval () und Operation.run () verwenden diese Sitzung, um Operationen auszuführen.

Dies ermöglicht die Verwendung eines interaktiven Kontexts wie einer Shell, da kein explizites Sitzungsobjekt übergeben werden muss, um op: auszuführen.

sess = tf.InteractiveSession()
a = tf.constant(5.0)
b = tf.constant(6.0)
c = a * b
# We can just use 'c.eval()' without passing 'sess'
print(c.eval())
sess.close()

Es ist auch möglich zu sagen, dass dies InteractiveSessionweniger Eingabe unterstützt, da Variablen ausgeführt werden können, ohne ständig auf das Sitzungsobjekt verweisen zu müssen.

einstellen
quelle
2
Was ist der Nachteil voneinander?
Skytree
25

Der einzige Unterschied zwischen Sessionund eine InteractiveSessionist , dass InteractiveSessionsich die macht Standard - Session , so dass Sie anrufen können , run()oder eval()ohne die Sitzung explizit aufrufen.

Dies kann hilfreich sein, wenn Sie mit TF in einer Python-Shell oder in Jupyter-Notizbüchern experimentieren, da kein explizites Sitzungsobjekt übergeben werden muss, um Vorgänge auszuführen.

Salvador Dali
quelle
1
Link ist defekt.
Skytree
1

Neben der Installation als Standardsitzung gemäß der offiziellen Dokumentation scheint es, dass die interaktive Sitzung nach einigen Tests zur Speichernutzung die Option gpu_options.allow_growth = True verwendet - siehe [using_gpu # allow_gpu_memory_growth] - während tf.Session () von Standardmäßig wird der gesamte GPU-Speicher zugewiesen.

Francesco Cascio
quelle
War das vielleicht einmal wahr, aber nicht mehr der Fall? Ich erinnere mich an diesen Unterschied in der Vergangenheit, aber jetzt scheinen neue Sitzungen nur jeweils 100 MB GPU-RAM (mit Version 1.13.1) zu verwenden, und ich kann ihn bei einer flüchtigen Suche nach 1.10, 1.11 nicht finden. 1.12 und 1.13 tf.InteractiveSessionDokumente beweisen auf die eine oder andere Weise.
Tsbertalan
-5

Anstelle der oben genannten Unterschiede besteht der wichtigste Unterschied darin, dass session.run()wir Werte mehrerer Tensoren in einem Schritt abrufen können.

Zum Beispiel:

num1 = tf.constant(5)
num2 = tf.constant(10)
num3 = tf.multiply(num1,num2)
model = tf.global_variables_initializer()

session = tf.Session()
session.run(model)

print(session.run([num2, num1, num3]))
Parvez Khan
quelle
1
Ist dies mit tf.InteractiveSession () nicht möglich?
Sirgogo
3
Dies ist eine falsche Antwort. Dies ist auch in interaktiven Sitzungen möglich
Harveyslash