Sto addestrando una CNN con TensorFlow per applicazioni di immagini mediche.Il tempo di elaborazione aumenta dopo ogni iterazione (TensorFlow)
Dato che non ho molti dati, sto provando ad applicare modifiche casuali al mio gruppo di addestramento durante il ciclo di addestramento per aumentare artificialmente il mio set di dati di addestramento. Ho fatto la seguente funzione in uno script diverso e lo chiamo il mio lotto di formazione:
def randomly_modify_training_batch(images_train_batch, batch_size):
for i in range(batch_size):
image = images_train_batch[i]
image_tensor = tf.convert_to_tensor(image)
distorted_image = tf.image.random_flip_left_right(image_tensor)
distorted_image = tf.image.random_flip_up_down(distorted_image)
distorted_image = tf.image.random_brightness(distorted_image, max_delta=60)
distorted_image = tf.image.random_contrast(distorted_image, lower=0.2, upper=1.8)
with tf.Session():
images_train_batch[i] = distorted_image.eval() # .eval() is used to reconvert the image from Tensor type to ndarray
return images_train_batch
Il codice funziona bene per l'applicazione di modifiche alle mie immagini.
Il problema è:
Dopo ogni iterazione del mio ciclo di formazione (+ feedfoward backpropagation), l'applicazione di questa stessa funzione per il mio prossimo gruppo di formazione in costante richiede 5 secondi in più rispetto all'ultima volta.
Ci vuole circa 1 secondo per elaborare e raggiungere oltre un minuto di elaborazione dopo un po 'più di 10 iterazioni.
Quali sono le cause di questo rallentamento? Come posso impedirlo?
(Sospetto qualcosa con "distorted_image.eval()" ma non ne sono del tutto sicuro. Sto aprendo una nuova sessione ogni volta? TensorFlow non è in grado di chiudere automaticamente la sessione mentre utilizzo in un "con tf .Session() "block?)
Possibile duplicato di [TensorFlow: prestazioni lente quando si ottengono gradienti negli input] (http://stackoverflow.com/questions/36245481/tensorflow-slow-performance-when-getting-gradients-at-inputs) – etarion