2017-03-29 31 views
6

Tensorflow'da, dağıtılmış eğitim için Between-graph Replication kullanarak birden çok Tensorflow Oturum oluşturabilir ve oluşturabiliriz. MonitoredTrainingSession(), birden çok Tensorflow Oturumunu koordine eder ve Tensorflow oturumunu/grafiğini geri yüklemek içiniçin checkpoint_dir argümanı vardır.MonitoredTrainingSession() işlevi "geri yükleme" ve "test modu" ile nasıl çalışır?

  1. Normalde saver.restore(...) tarafından Tensorflow grafikleri geri tf.train.Saver() nesne kullanın: Şimdi şu soru var. Ama bunları MonitoredTrainingSession() kullanarak nasıl geri yükleriz?
  2. Birden çok işlem yürüttüğümüzden ve her işlem oluşturulduğundan ve eğitim için bir Tensorflow Oturumu oluşturduğundan, eğitimden sonra sınama (veya tahmin) için birden çok işlemi çalıştırmamız gerekip gerekmediğini merak ediyorum. Başka bir deyişle, MonitoredTrainingSession() test (veya tahmin) modu ile nasıl çalışır?

Tensorflow Doc'u okudum, ancak bu 2 sorunun yanıtlarını bulamadım. Birisi çözüm varsa çok sevinirim. Teşekkürler!

cevap

-1
  1. Bu geri yükleme sizin için ele alınmış gibi görünüyor. Int o çağıran MonitoredTrainingSession oluşturma MonitoredSession bir örneğini döndürdüğünü söylüyor docs "bir kontrol noktası varsa ... değişkenleri geri ..." daha spesifik

  2. kontrol dışarı tf.contrib.learn.Estimator(..).predict(..) ve tf.contrib.learn.Estimator(..)._infer_model(..) yöntemleri here ve here API. Ayrıca orada bir MonitoredSession oluştururlar.

0

Kısa cevap:

  1. Sen mon_sess.run geçmek optimizer küresel adımı geçmesi gerekiyor. Bu, hem kayıtlı kontrol noktalarını kaydetmek hem de kaydetmek için mümkün kılar.
  2. Tek bir MonitoredTrainingSession aracılığıyla bir eğitim + çapraz doğrulama oturumu eşzamanlı olarak çalıştırmak mümkündür. İlk olarak, aynı grafiğin ayrı akışları aracılığıyla eğitim partilerinden ve çapraz doğrulama gruplarından geçmeniz gerekir (bunun nasıl yapılacağı hakkında bilgi için this guide'a bakmanızı öneririm). İkincisi, - mon_sess.run() - eğitim akışı için bir optimizatör ve çapraz doğrulama akışının kaybı (/ izlemek istediğiniz parametrenin) için bir parametreyi geçirmeniz gerekir. Bir test seansını antrenmandan ayrı olarak çalıştırmak istiyorsanız, sadece grafik üzerinden test setini çalıştırın ve sadece test_loss (/ izlemek istediğiniz diğer parametreler) grafiğini kullanarak çalıştırın. Bunun nasıl yapıldığı hakkında daha fazla bilgi için aşağıya bakın.

Uzun cevap: Kendimi tf.train.MonitoredSession ile neler yapılabileceğini daha iyi görebilmek olsun

Ben tf.train.MonitoredTrainingSession basitçe özel bir versiyonunu yaratıyor (benim cevap güncelleyecektir tf.train.MonitoredSession, source code'da görüldüğü gibi).

Aşağıda, kontrol noktalarını her 5 saniyede bir "./ckpt_dir" konumuna nasıl kaydedebileceğinizi gösteren bir örnek kod verilmiştir.Ne zaman kesintiye, onun son kaydedilen denetim noktasına yeniden başlar:

  1. tf.train.MonitoredTrainingSession bir tf.train.Scaffold oluşturur: Bu aslında üç nedeni ulaşmak için MonitoredTrainingSession neler oluyor

    def train(inputs, labels_onehot, global_step): 
        out = tf.contrib.layers.fully_connected(
              inputs, 
              num_outputs=10, 
              activation_fn=tf.nn.sigmoid) 
        loss = tf.reduce_mean(
          tf.reduce_sum(
           tf.nn.sigmoid_cross_entropy_with_logits(
              logits=out, 
              labels=labels_onehot), axis=1)) 
        train_op = opt.minimize(loss, global_step=global_step) 
        return train_op 
    
    with tf.Graph().as_default(): 
        global_step = tf.train.get_or_create_global_step() 
        inputs = ... 
        labels_onehot = ... 
        train_op = train(inputs, labels_onehot, global_step) 
    
        with tf.train.MonitoredTrainingSession(
         checkpoint_dir='./ckpt_dir', 
         save_checkpoint_secs=5, 
         hooks=[ ... ] # Choose your hooks 
        ) as mon_sess: 
         while not mon_sess.should_stop(): 
          mon_sess.run(train_op) 
    

    webde bir örümcek gibi çalışan nesne; modeli eğitmek, kaydetmek ve yüklemek için ihtiyacınız olan parçaları toplar.

  2. tf.train.ChiefSessionCreator nesnesini oluşturur. Bu konudaki bilgim sınırlıdır, fakat benim anlayışımdan, tf algoritmanızın birden fazla sunucuya yayıldığı zaman kullanılır. Benim aldığım dosya, bilgisayarın ana bilgisayar olduğunu söyleyen bir bilgisayar olduğunu ve kontrol noktası dizininin kaydedilmesi gerektiğini ve bu kaydedicilerin buradaki verileri kaydedebilmelerini istediklerini anlatıyor.
  3. Denetim noktalarını kaydetmek için kullanılan tf.train.CheckpointSaverHook. o iş yapmak için

, tf.train.CheckpointSaverHook ve tf.train.ChiefSessionCreator kontrol noktası dizin ve iskele için aynı referansları geçirilmelidir. Örneğin kendi parametreleriyle tf.train.MonitoredTrainingSession yukarıdaki yukarıdaki 3 bileşenleri ile uygulanacak olsaydı, böyle bir şey görünecektir:

checkpoint_dir = './ckpt_dir' 

scaffold = tf.train.Scaffold() 
saverhook = tf.train.CheckpointSaverHook(
    checkpoint_dir=checkpoint_dir, 
    save_secs=5 
    scaffold=scaffold 
) 
session_creator = tf.train.ChiefSessionCreator(
    scaffold=scaffold, 
    checkpoint_dir=checkpoint_dir 
) 

with tf.train.MonitoredSession(
    session_creator=session_creator, 
    hooks=[saverhook]) as mon_sess: 
     while not mon_sess.should_stop(): 
      mon_sess.run(train_op) 

tren + çapraz doğrulama oturumu yapmak için, sadece (yukarısında iken, döngüde) aynı grafikte üzerinden iki farklı setleri geçmesi ve sonra da çalıştırmak için gereken:

mon_sess.run([train_op, cross_validation_loss]) 

Bu doğrulama için eğitim seti için eğitim duruma getiricisi, hem de validation_loss parametre çalışır ayarlayın. Grafiğiniz doğru bir şekilde uygulandıysa, bu, grafiğin sadece eğitim setinde eğitileceği ve sadece çapraz doğrulama setinde doğrulanacağı anlamına gelir.

İlgili konular