Wie machen Sie TensorFlow + Keras schnell mit einem TFRecord dataset?
Was ist ein Beispiel für die Verwendung einer TensorFlow TFRecord mit Keras Modell und tf.Sitzung.run (), während der Datensatz in Tensoren w/queue-Läufer?
Unten ist ein Ausschnitt, das funktioniert, aber es benötigt die folgenden Verbesserungen:
- Verwenden Sie die Modell-API
- geben Sie eine Eingabe()
- Laden Sie ein dataset aus einem TFRecord
- Laufen über ein dataset parallel (z.B. mit einem queuerunner)
Hier ist das snippet, es sind mehrere TODO-Zeilen angibt, was benötigt wird:
from keras.models import Model
import tensorflow as tf
from keras import backend as K
from keras.layers import Dense, Input
from keras.objectives import categorical_crossentropy
from tensorflow.examples.tutorials.mnist import input_data
sess = tf.Session()
K.set_session(sess)
# Can this be done more efficiently than placeholders w/TFRecords?
img = tf.placeholder(tf.float32, shape=(None, 784))
labels = tf.placeholder(tf.float32, shape=(None, 10))
# TODO: Use Input()
x = Dense(128, activation='relu')(img)
x = Dense(128, activation='relu')(x)
preds = Dense(10, activation='softmax')(x)
# TODO: Construct model = Model(input=inputs, output=preds)
loss = tf.reduce_mean(categorical_crossentropy(labels, preds))
# TODO: handle TFRecord data, is it the same?
mnist_data = input_data.read_data_sets('MNIST_data', one_hot=True)
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(loss)
sess.run(tf.global_variables_initializer())
# TODO remove default, add queuerunner
with sess.as_default():
for i in range(1000):
batch = mnist_data.train.next_batch(50)
train_step.run(feed_dict={img: batch[0],
labels: batch[1]})
print(loss.eval(feed_dict={img: mnist_data.test.images, labels: mnist_data.test.labels}))
Warum ist diese Frage relevant?
- Für high-performance-training, ohne wieder zu python
- keine TFRecord zu numpy tensor Konvertierungen
- Keras wird bald Teil der tensorflow
- Zeigen, wie Keras Model () - Klassen annehmen kann, Tensoren für die input-Daten korrekt.
Hier einige starter-Informationen für eine semantische Segmentierung problem Beispiel:
- Beispiel unet Keras Modell unet.py, passiert für die semantische Segmentierung.
- Keras + Tensorflow Blog-Post
- Eine Versuch läuft die unet-Modell tf-Sitzung mit TFRecords und Keras Modell (funktioniert nicht)
- Code zum erstellen der TFRecords: tf_records.py
- Ein Versuch läuft die unet-Modell tf-Sitzung mit TFRecords und Keras Modell ist in densenet_fcn.py (funktioniert nicht)
github.com/tensorflow/tensorflow/issues/8787 werden für die Arbeit in Richtung auf die uneingeschränkte Unterstützung dieser Funktionalität, die über die quick-fix in der akzeptierten Antwort.
aktualisiert pull-request github.com/fchollet/keras/pull/6928
aktualisiert pull-request github.com/fchollet/keras/pull/6928
InformationsquelleAutor Andrew Hundt | 2017-02-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich nicht verwenden tfrecord dataset-format, also nicht streiten über die vor-und Nachteile, aber ich habe Interesse, in der Verlängerung Keras unterstützen die gleichen.
github.com/indraforyou/keras_tfrecord ist das repository. Kurz erklären die wichtigsten änderungen.
data_to_tfrecord
undread_and_decode
hier kümmert sich um die Erstellung tfrecord dataset und laden das gleiche. Besondere Sorgfalt muss die Umsetzung desread_and_decode
sonst werden Sie Gesicht kryptische Fehler, die während der Ausbildung.Nun beide
tf.train.shuffle_batch
und KerasInput
Ebene zurück tensor. Aber der eine kehrte vontf.train.shuffle_batch
nicht benötigten Metadaten von Keras intern. Wie es sich herausstellt, jeder tensor kann leicht gedreht werden in einen tensor mit keras Metadaten durch den AufrufInput
Schicht mittensor
param.Also, dieser kümmert sich um die Initialisierung:
Nun mit
x_train_inp
alle keras Modell entwickelt werden kann.Lässt sagen
train_out
ist die Ausgabe tensor Ihrer keras Modell. Sie können einfach schreiben Sie eine kundenspezifische Schulung-Schleife für die Zeilen:Eines der Merkmale von keras, das macht es so lukrativ ist seine generalisierte Ausbildung Mechanismus, mit dem die callback-Funktionen.
Sondern auch um die Unterstützung tfrecords Art der Ausbildung gibt es mehrere änderungen, die müssen in der
fit
Funktionfeed_dict
Aber all dies kann leicht unterstützt von anderen flag-parameter. Was macht die Dinge in Unordnung sind die keras Funktionen
sample_weight
undclass_weight
Sie verwendet werden, Wiegen jeder Probe und Wiegen jede Klasse. Für diese incompile()
keras schafft Platzhalter (hier) und Platzhalter sind auch implizit für die Ziele (hier) die nicht gebraucht werden, in unserem Fall die Etiketten sind bereits eingezogen in die von tfrecord Leser. Dieser Platzhalter muss gefüttert werden im Laufe der Sitzung führen, die unnötig ist, die in unseren cae.Also unter Berücksichtigung dieser änderungen
compile_tfrecord
(hier) undfit_tfrecord
(hier) sind die Erweiterung voncompile
undfit
und Aktien sagen 95% des Codes.Können Sie verwendet werden, in der folgenden Weise:
Sind Sie herzlich willkommen, um eine Verbesserung der code-und pull-Anforderungen.
hier ist die keras-contrib-pull-request #27
Aktualisiert pull-request: github.com/fchollet/keras/pull/6928
InformationsquelleAutor
Update 2018-08-29 dieser wird jetzt direkt unterstützt in keras, siehe Folgendes Beispiel:
https://github.com/keras-team/keras/blob/master/examples/mnist_tfrecord.py
Original Antwort:
TFRecords werden unterstützt durch den Einsatz einer externen Verlust. Hier sind die wichtigsten Linien konstruieren einer externen Verlust:
Hier ist ein Beispiel für Keras 2. Es funktioniert nach dem aufbringen der kleine patch #7060:
Ich habe auch schon arbeiten an der Verbesserung der Unterstützung für TFRecords in der folgenden Ausgabe und pull-Anforderung:
Schließlich ist es möglich
tf.contrib.learn.Experiment
zu trainieren Keras Modelle in TensorFlow.Aus irgendeinem Grund
data_flow_ops.RecordInput
gibt nur die erste Partie, dann Keras denken dieser Epoche geschehen ist, und starten einer anderen Epoche. Ich kann nicht herausfinden, warum. Ich weiß es ist schwer für Sie, um zu sehen, was Los ist, aber haben Sie irgendwelche Vorschläge auf, wie zu Debuggen? Vielen Dank. Ich bin sicher, dass tfrecord Datei-I übergeben wird, wird richtig (habe über 60k Bilder).Diese sollten einer gesonderten stackoverflow-Frage. Mit der aktuellen keras master in einem Schritt == eine Epoche, so führen Sie einfach wiederholt oder versuchen Sie github.com/fchollet/keras/pull/7113.
InformationsquelleAutor