Tensorflow'da global_step ne anlama geliyor?


90

Bu, TensorFlow web sitesinden öğretici koddur .

  1. biri ne anlama global_stepgeldiğini açıklamaya yardımcı olabilir mi?

    Tensorflow web sitesinde, küresel adımın eğitim adımlarını saymak için kullanıldığını yazdım , ancak tam olarak ne anlama geldiğini tam olarak anlayamıyorum .

  2. Ayrıca, kurulum sırasında 0 rakamı ne anlama geliyor global_step?

    def training(loss,learning_rate):
        tf.summary.scalar('loss',loss)
        optimizer = tf.train.GradientDescentOptimizer(learning_rate)
        
        # Why 0 as the first parameter of the global_step tf.Variable?
        global_step = tf.Variable(0, name='global_step',trainable=False)

        train_op = optimizer.minimize(loss, global_step=global_step)
    
        return train_op

Tensorflow belgesine göre global_step: değişkenler güncellendikten sonra birer birer artış . Bu, bir güncellemeden global_stepsonra 1 olduğu anlamına mı geliyor ?

Yanıtlar:


113

global_stepgrafikte görülen parti sayısını ifade eder. Her parti verildiğinde, ağırlıklar kaybı en aza indirecek yönde güncellenir. global_stepsadece şimdiye kadar görülen parti sayısını takip eder. minimize()Argüman listesine geçtiğinde değişken bir artar. Bir göz atın optimizer.minimize().

global_stepKullanarak değeri elde edebilirsiniz tf.train.global_step(). Ayrıca yardımcı program yöntemleri tf.train.get_global_stepveyatf.train.get_or_create_global_step .

0 bu bağlamda küresel adımın başlangıç ​​değeridir.


Teşekkürler! Sağladığınız bağlantısında, tf.train.global_step(), global_step_tensorortalama 10 yığın zaten grafikte tarafından görüldüğünü 10. Does olarak ayarlanır?
GabrielChu

9
@martianwars, global_step'e sahip olma noktasını hala anlamadım. Python programının kendisi tarafından yönlendirilen gruplar için döngü değildir, bu nedenle python programı kaç tane grup yapıldığını kolayca bilebilir. Tensorflow'un böyle bir sayacı sürdürmesi neden zahmete giriyor?
victorx

1
optimize ediciler sabitlerini genel adıma göre değiştirir @xwk
martianwars

24
xwk sorusuna cevap vermek için, 100 yinelemeden sonra eğitimi bırakırsanız ve ertesi gün modeli geri yüklerseniz ve başka bir 100 yineleme çalıştırırsanız düşünüyorum. Şimdi genel adımınız 200'dür, ancak ikinci çalıştırmanın yerel yineleme numarası 1'den 100'e kadardır ve bu sayı o çalıştırma için küresel yineleme adımına göre yereldir. Dolayısıyla global adım, toplam yineleme sayısını kaydeder, belki öğrenme oranını veya diğer hiper parametreleri değiştirmek için kullanılabilir.
Wei Liu

6
Wei Liu'nun cevabını geliştirmek için küresel adımlar, dağıtılmış TensorFlow işlerinin ilerlemesini izlemek için de yararlıdır. İşçiler aynı anda partileri gördüklerinden, görülen toplam parti sayısını takip edecek bir mekanizma olması gerekir. Örneğin StopAtStepHook'un çalışma şekli budur .
Malo Marrec

4

global_step VariableGörevleri arasında eğitim sırasında toplam adım sayısını tutar (her adım endeksi sadece tek bir görev üzerinde olur).

Tarafından oluşturulan bir zaman çizelgesi global_step, her bir görevden ayrı ayrı büyük şemada nerede olduğumuzu anlamamıza yardımcı olur. Örneğin, kayıp ve doğruluk global_stepTensorboard üzerinde grafiklendirilebilir.


4

size aşağıda canlı bir örnek gösterelim:

kod:

train_op = tf.train.GradientDescentOptimizer(learning_rate=LEARNING_RATE).minimize(loss_tensor,global_step=tf.train.create_global_step())
with tf.Session() as sess:
    ...
    tf.logging.log_every_n(tf.logging.INFO,"np.mean(loss_evl)= %f at step %d",100,np.mean(loss_evl),sess.run(tf.train.get_global_step()))

karşılık gelen baskı

INFO:tensorflow:np.mean(loss_evl)= 1.396970 at step 1
INFO:tensorflow:np.mean(loss_evl)= 1.221397 at step 101
INFO:tensorflow:np.mean(loss_evl)= 1.061688 at step 201

1

İki (veya daha fazla) farklı adıma ihtiyaç duyabilecek ağlar, örneğin GAN'lar vardır. Bir GAN'ı WGAN spesifikasyonu ile eğitmek, ayırıcı (veya eleştirmen) D üzerindeki adımların jeneratör G'de yapılan adımlardan daha fazla olmasını gerektirir. Bu durumda, farklı global_steps değişkenlerini bildirmek faydalıdır.

Örnek: ( G_lossve D_lossjeneratörün ve ayırıcının kaybı)

G_global_step = tf.Variable(0, name='G_global_step', trainable=False)
D_global_step = tf.Variable(0, name='D_global_step', trainable=False)

minimizer = tf.train.RMSPropOptimizer(learning_rate=0.00005)

G_solver = minimizer.minimize(G_loss, var_list=params, global_step=G_global_step)
D_solver = minimizer.minimize(D_loss, var_list=params, global_step=D_global_step)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.