El tiempo de procesamiento se hace más y más largo después de cada iteración (TensorFlow)

Estoy entrenando una CNN con TensorFlow para la aplicación de imágenes médicas.

Como no tengo muchos datos, estoy tratando de aplicar modificaciones aleatorias a mi grupo de entrenamiento durante el ciclo de entrenamiento para boost artificialmente mi conjunto de datos de entrenamiento. Realicé la siguiente función en un script diferente y la llamé a mi lote de capacitación:

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 

El código funciona bien para aplicar modificaciones a mis imágenes.

El problema es :

Después de cada iteración de mi ciclo de entrenamiento (feedfoward + backpropagation), aplicar esta misma función a mi siguiente grupo de entrenamiento toma 5 segundos más que la última vez.

El proceso tarda aproximadamente 1 segundo en procesarse y llega a más de un minuto de procesamiento después de un poco más de 10 iteraciones.

¿Qué causa esta ralentización? ¿Cómo puedo prevenirlo?

(Sospecho que hay algo con distorted_image.eval() pero no estoy seguro. ¿Estoy abriendo una nueva sesión cada vez? No se supone que TensorFlow cierre automáticamente la sesión como la uso en un bloque “with tf.Session ()” ?)

Llama ese código en cada iteración, por lo que cada iteración agrega estas operaciones al gráfico. No quieres hacer eso. Desea construir el gráfico al inicio y en el ciclo de entrenamiento solo ejecútelo. Además, ¿por qué necesitas convertir a ndimage otra vez después, en lugar de poner las cosas en tu gráfico TF una vez y simplemente utilizar los tensores hasta el final?