Zusammenfassung: Die Verwendung der neuen tf.contrib.data.Dataset verdoppelt die Größe meiner Graph protobuff Datei und ich kann das Diagramm in Tensorboard nicht visualisieren.Tensorflow Dataset API verdoppelt Graph protobuff filesize
Die Details:
Ich versuche, die neue TensorFlow tf.contrib.data.Dataset
Funktionalität zusammen mit dem tf.contrib.learn.Experiment
Rahmen aus. Meine Eingabedaten sind definiert als input functions, die Tensoren von Features und Labels zurückgeben.
Wenn ich meine Eingabefunktion mit der tf.train.slice_input_producer
Funktion wie im folgenden Codeblock (vollständigen Code here) erstellen, dann mein resultierenden graph.pbtxt
Datei ist 620M und die .meta
Dateien sind um 165M in der Größe.
def train_inputs():
with tf.name_scope('Training_data'):
x = tf.constant(mnist.train.images.reshape([-1, 28, 28, 1]))
y = tf.constant(mnist.train.labels)
sliced_input = tf.train.slice_input_producer(
tensor_list=[x, y], shuffle=True)
return tf.train.shuffle_batch(
sliced_input, batch_size=batch_size,
capacity=10000, min_after_dequeue=batch_size*10)
Nun, wenn ich meine Eingangsfunktion mit dem neuen tf.contrib.data.Dataset.from_tensor_slices
wie im folgenden Codeblock (vollständige Code here) erstellen, dann meine resultierende graph.pbtxt
Datei verdoppelt sich auf 1.3G und die .meta
Dateien doppelt so groß wie 330M. Jetzt
def train_inputs():
with tf.name_scope('Training_data'):
images = mnist.train.images.reshape([-1, 28, 28, 1])
labels = mnist.train.labels
dataset = tf.contrib.data.Dataset.from_tensor_slices(
(images, labels))
dataset = dataset.repeat(None) # Infinite
dataset = dataset.shuffle(buffer_size=10000)
dataset = dataset.batch(batch_size)
iterator = dataset.make_one_shot_iterator()
next_example, next_label = iterator.get_next()
return next_example, next_label
weil die graph.pbtxt
Datei ist so groß TensorBoard Alter nimmt diese Datei zu analysieren, und ich bin nicht in der Lage meines Modell Diagramm visuell zu debuggen. Ich fand in der Dataset documentation, dass diese Größenzunahme kommt aus: "der Inhalt des Arrays wird mehrmals kopiert werden" und die solution wäre, Platzhalter zu verwenden. Doch in diesem Fall würde ich brauche in dem numpy Arrays in die Platzhalter mit einer aktiven Sitzung füttern den Iterator zu initialisieren:
sess.run(iterator.initializer, feed_dict={features_placeholder: features, labels_placeholder: labels})
Dies scheint jedoch aus meiner Kontrolle zu sein, wenn die tf.contrib.learn.Experiment
Framework .
Wie kann ich den Initialisierer des Iterators mit dem Experiment-Framework initialisieren? Oder finden Sie eine Problemumgehung für die Verwendung der Dataset-API, ohne meine Diagrammgröße zu erhöhen?
Schön. löst auch mein Problem. aber scheint wie ein Workaround? Mein Beitrag: https://stackoverflow.com/questions/46207211/tensorflow-dataset-api-causes-graph-size-to-explode –