2016-09-24 4 views
8

Tensorflow documentation hat den folgenden Beispielcode zum Ermitteln der Geräteplatzierung von Knoten. Das heißt, auf welcher Vorrichtung eine bestimmte Berechnung stattfindet.Tensorflow Dokumentationsbeispiel Code auf "Logging Device Placement" druckt nichts

# Creates a graph. 
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a') 
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b') 
c = tf.matmul(a, b) 
# Creates a session with log_device_placement set to True. 
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True)) 
# Runs the op. 
print sess.run(c) 

Für mich wird der Code die Standorte der Geräte nicht gedruckt, wie es soll. Ich benutze das Jupyter-Notebook, das auf Ubuntu läuft. Wie kann ich das beheben oder die Informationen auf andere Weise herausfinden?

Antwort

3

Leider Jupyter sieht nicht die C++ Fehler stdout Nachrichten, die die Geräteplatzierungsprotokollierung verwendet. Es gibt einen längeren Thread auf das Problem hier:

https://github.com/nteract/hydrogen/issues/209

Es gibt keine einfache Abhilfe, die ich kenne, anders als Ihr Skript läuft außerhalb von Jupyter.

7

Für Jupyter (und andere) Benutzer gibt es eine kürzlich hinzugefügte Funktion, die es ermöglicht, die Geräteplatzierung beim Aufruf eines Session.run() Anrufs zurückzulesen und in Ihrem Notebook auszudrucken.

# Creates a graph. 
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a') 
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b') 
c = tf.matmul(a, b) 
# Creates a session with log_device_placement set to True. 
sess = tf.Session() 

# Runs the op. 
options = tf.RunOptions(output_partition_graphs=True) 
metadata = tf.RunMetadata() 
c_val = sess.run(c, options=options, run_metadata=metadata) 

print metadata.partition_graphs 

Die metadata.partition_graphs enthält den eigentlichen Knoten des Graphen, die durch die Vorrichtung ausgeführt partitioniert. Die Partitionen sind nicht explizit mit dem Gerät, das sie repräsentieren, beschriftet, aber jeder NodeDef im Graphen hat seinen device Feldsatz.

+0

Es gab mir nur: '' '' – guillefix

+2

verwenden Sie einfach 'print metadata' anstelle von' print metadata.partition_graphs'. Sie werden sehen, dass es sich um eine Menge von Objekten handelt, die Sie jeweils nach Indizes anzeigen können, wie zum Beispiel 'print metadata.partition_graphs [0]' –

0

Ich kann das Gerät Mapping gedruckt nach Standard aus dem Jupyter Notebook-Prozess im Terminal sehen. Es wird einfach nicht im Notebook gedruckt.