2016-03-26 16 views
6

Tıbbi görüntüler için TensorFlow ile bir CNN eğitimi alıyorum.Her iterasyondan sonra işlem süresi uzar ve uzar (TensorFlow)

Çok fazla veriye sahip olmadığımdan, eğitim veri kümemde eğitim veri kümemi yapay olarak artırmak için eğitim grubumda rastgele değişiklikler yapmaya çalışıyorum. Ben farklı bir komut dosyasında aşağıdaki işlevi yaptı ve benim eğitim toplu üzerine diyoruz:

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 

kod benim resimlere değişiklikler uygulamak için iyi çalışır.

sorundur: benim eğitim döngü (feedfoward + geri iletme) her yineleme sonra

, sürekli son kez 5 saniyeden daha uzun sürer sonraki eğitim toplu aynı fonksiyonu uygulayarak.

10 iterasyondan biraz daha fazla bir işlemden sonra işlemek ve bir dakika boyunca işlem yapmak yaklaşık 1 saniye sürer.

Bu yavaşlamaya neden olan nedir? Nasıl önleyebilirim?

("distorted_image.eval()" ile bir şeyden şüpheleniyorum ama emin değilim. Her seferinde yeni bir oturum açıyor muyum? TensorFlow, "tf ile kullandığımda otomatik olarak oturumu kapatmamalı." .Session() "block?)

+0

Olası kopyası [TensorFlow: girişlerde degradeler alınırken yavaş performans] (http://stackoverflow.com/questions/36245481/tensorflow-slow-performance-when-getting-gradients-at-inputs) – etarion

cevap

6

Her bir yinelemede bu kodu çağırırsınız, böylece her bir yineleme bu işlemleri grafiğe eklersiniz. Bunu yapmak istemiyorsun. Grafiği başlangıçta oluşturmak ve eğitim döngüsünde sadece yürütmek istiyorsunuz. Ayrıca, bir kez TF grafiğinize bir şeyler koymak ve sadece tensörleri sonuna kadar kullanmak yerine, neden daha sonra tekrar ndimage'e dönmeniz gerekiyor?

+0

Geri dönüyorum görüntüleri matplotlib.pyplot ile görselleştirmek için ndarray. Belki de TensorFlow için çok yeni, ancak veri kümelerimi görsel olarak görselleştirmek için TensorBoard'un en uygun yol olmadığını hissettim. – Julep

+1

@Julep İhtiyaç duymanız halinde, görüntü döngüsünün sonucunu da talep ederek (tensör zincirini kırmadan) bile görüntüyü alabilirsiniz (muhtemelen bir oturumunuz var.) ([Train_op, loss ]) Eğer giriş partisini de isterseniz, onu bir ndarray olarak elde edersiniz ve bu noktada görselleştirebilirsiniz. – etarion