Code: Select all
({'data': TensorSpec(shape=(15000, 1), dtype=tf.float32), 'index': TensorSpec(shape=(2,), dtype=tf.int64)}, TensorSpec(shape=(1,), dtype=tf.int32))
Die tf.data.dataset wird mit dataset = tf.data.dataset.from_tensor_slices ((x, y)) erstellt, wobei x ist ein Diktat von zwei Schlüssel: < /p>
- : Ein NP -Array von Form (200K, 1500, 1) , index mit
Code: Select all
data
- : Ein NP -Array von Form (200K, 2)
Code: Select all
index
Mein Datensatz enthält ungefähr 200K -Trainingsmuster (nach Ausführung von Unterabtastungen) und 200K -Validierungsmuster. data.dataset.from_tensor_slices Ich habe einen Spike in der GPU -Speicherverwendung bemerkt, wobei etwa 16 GB nach dem Erstellen des Trainings tf.dataset und mehr als 16 GB nach dem Erstellen der Validierung tf.dataset besetzt sind.
Nach dem Erstellen des Tf.Dataset führen ich einige Operationen aus (z. B. Shuffle, Batching und Vorabstieg) und Call model.fit . Mein Modell verfügt über etwa 500K trainierbare Parameter. Ich muss in einigen zusätzlichen Daten Schlussfolgerungen ausführen, damit ich mit diesen Daten einen neuen tf.dataset erstelle, wobei ich erneut tf.dataset.from_tensor_slices verwendete. Ich bemerkte jedoch, dass das Training und die Validierung tf.dataset sich weiterhin im GPU -Speicher befinden, was dazu führt, dass mein Skript mit einem aus dem Speicherproblem für das neuen tf.dataset Ich möchte Inferenz ausführen.
Ich habe versucht, Del auf den beiden tf.dataset anzurufen und anschließend gc.collect () aufzurufen, aber ich glaube, das wird nur gelöscht RAM, nicht GPU -Speicher. Außerdem habe ich versucht, einige Operationen zu deaktivieren, die ich bewerbe, wie z. Zwei tf.dataset von gpu ohne einen Anruf bei keras.backend.clear_Session () , da dies auch das Modell von GPU entfernen würde? Oder ist meine einzige Option, Clear_Session aufzurufen und das Modell für Inferenz von der Festplatte neu zu laden?