Dies hängt hauptsächlich von der Speichergröße Ihres Grafikprozessors ab. Es ist jedoch schwierig, den gesamten Datensatz zusammen mit dem Modell und seinen erforderlichen Operationen (d. H. Der Vorhersage von Wahrscheinlichkeiten) anzupassen. Sie müssen also an eine andere Perspektive denken. Ich gehe davon aus Sie den Code in diese Richtung geht:
# Model Definition
X = tf.placeholder(tf.float32, shape=[None, DIM,DIM,3], name='X')
y = tf.placeholder(tf.float32, shape=[None, N_CLASSES], name='y')
...
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
...
# Training your model
sess.run([train_step], feed_dict={X: X_batch, y: y_batch})
Statt X
und y
als feed_dict
zum train_step
verwenden. Sie könnten einfach die cross_entropy
für alle Stapel akkumulieren (d. H. Für den gesamten Datensatz). Dann können Sie die train_step
einmal ausführen. Zum Beispiel:
cross_entropy_all = []
for X_batch, y_batch in batches_generator():
cross_entropy_all += sess.run([cross_entropy], feed_dict={X: X_batch, y: y_batch})
# Numpy or Tensorflow equivalent for `vstack`
cross_entropy_all = np.vstack(cross_entropy_all)
# Run the optimizer on the entire dataset (not just on a specific batch)
sess.run([train_step], feed_dict={cross_entropy: cross_entropy_all})
Dies sollte Ihr Ziel, ohne den Betrieb Ihren GPU aus dem Speicher erreichen. Der vorgeschlagene Ansatz führt den Optimierungsschritt gegen alle Kreuzentropien aus. Daher müssen Sie X und y nicht zuführen (die zur Erstellung des cross_entropy
benötigt/benötigt werden, da sie bereits dem Optimierungsschritt zugeführt werden).