2016-08-07 15 views
5

Giriş vektörünün başka bir modelin çıktısı olduğu bir model çalışıyorum. Bu, aynı modelde ikinci modeli sıfırdan başlatırken (tf.initialize_variables() kullanarak) ilk modelin bir denetim noktası dosyasından geri yüklenmesini içerir.Tensorflow'da birden fazla oturum ve grafik (aynı işlemde)

Önemli miktarda kod ve soyutlama var, bu yüzden ilgili bölümleri buraya yapıştırıyorum.

self.variables = [var for var in all_vars if var.name.startswith(self.name)] 
saver = tf.train.Saver(self.variables, max_to_keep=3) 
self.save_path = tf.train.latest_checkpoint(os.path.dirname(self.checkpoint_path)) 

if should_restore: 
    self.saver.restore(self.sess, save_path) 
else: 
    self.sess.run(tf.initialize_variables(self.variables)) 

Her model kendi grafik ve seans içinde kapsamlı alınır, örneğin:

self.graph = tf.Graph() 
self.sess = tf.Session(graph=self.graph) 

with self.sess.graph.as_default(): 
    # Create variables and ops. 

her modeli içinde tüm değişkenler variable_scope içinde oluşturulan aşağıdaki

geri kodudur içerik yöneticisi. aşağıdaki gibi

besleme çalışır:

  • bir arka plan iş parçacığı input = scipy.misc.imread(X) üzerinde sess.run(inference_op) çağırır ve bir engelleme evreli kuyrukta sonucu koyar.
  • Ana eğitim döngüsü, sıradan okur ve ikinci modelde sess.run(train_op) numaralı telefonu arar.

SORUN: Hatta eğitim (ikinci modelin) çok birinci tekrarda kaybı değerleri, ishal karşısında büyük ölçüde değişmeye devam (ve birkaç iterasyonlarında nan haline) olduğunu gözlemliyorum
. İlk modelin çıktısının her zaman aynı olduğunu doğruladım. İlk modelin sess.run'unu yorumlamak ve bunu bir pickled dosyasındaki aynı girişle değiştirmek, bu davranışı göstermez. Bu muğlak olduğunu biliyorum

loss_op = tf.nn.sparse_softmax_cross_entropy(network.feedforward()) 
    # Apply gradients. 
    with tf.control_dependencies([loss_op]): 
     opt = tf.train.GradientDescentOptimizer(lr) 
     grads = opt.compute_gradients(loss_op) 
     apply_gradient_op = opt.apply_gradients(grads) 

    return apply_gradient_op 

, ama daha fazla ayrıntı için mutluyum:

Bu

train_op olduğunu. Herhangi bir yardım takdir edilir!

cevap

1

Sorun, farklı oturum nesnelerinin eşzamanlı çalıştırılması nedeniyle gerçekleşiyor. İlk modelin oturumunu arka plan iş parçacığından ana iş parçacığına geçirdim, kontrollü denemeyi birkaç kez tekrarladı (24 saatten uzun süren ve yakınsamaya ulaşan) ve hiçbir zaman NaN'u gözlemlemedim. Öte yandan, eşzamanlı yürütme modeli birkaç dakika içinde ortadan kaldırır.

Tüm modeller için ortak bir oturum nesnesi kullanmak için kodumu yeniden yapılandırdım.

+0

Aynı sorunla karşılaşıyorum. Çözümünüzü detaylandırır mısınız lütfen? –

+1

Aynı anda 'sess.run' çalıştırmayın. Tensorflow (tüm açıkta kalan) GPU belleğinin tam kontrolünü üstlenir. Aynı anda iki farklı süreçte veya oturumda 'session.run 'çalıştırılması sorunlara neden olacaktır. – Vikesh