Apa yang dimaksud global_step di Tensorflow?

90

Ini adalah kode tutorial dari situs TensorFlow,

  1. Adakah yang bisa membantu menjelaskan apa global_stepartinya?

    Saya menemukan di situs web Tensorflow yang menulis bahwa langkah global digunakan untuk menghitung langkah-langkah pelatihan , tetapi saya tidak mengerti apa artinya.

  2. Juga, apa arti angka 0 saat menyiapkan 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

Menurut Tensorflow doc global_step: bertambah satu setelah variabel diperbarui . Apakah itu berarti setelah satu pembaruan global_stepmenjadi 1?

GabrielChu
sumber

Jawaban:

113

global_stepmengacu pada jumlah batch yang dilihat oleh grafik. Setiap kali batch disediakan, bobot diperbarui ke arah yang meminimalkan kerugian. global_stephanya melacak jumlah batch yang dilihat sejauh ini. Ketika dilewatkan dalam minimize()daftar argumen, variabel bertambah satu. Silahkan lihat optimizer.minimize().

Anda bisa mendapatkan global_stepnilainya menggunakan tf.train.global_step(). Juga berguna adalah metode utilitas tf.train.get_global_stepatau tf.train.get_or_create_global_step.

0 adalah nilai awal dari langkah global dalam konteks ini.

martianwars
sumber
Terima kasih! Di link yang Anda berikan, tf.train.global_step(), yang global_step_tensordiatur untuk 10. Apakah itu berarti 10 batch sudah dilihat oleh grafik?
GabrielChu
9
@martianwars, saya masih belum mengerti maksudnya memiliki global_step. Bukankah perulangan untuk batch digerakkan oleh program python itu sendiri, sehingga program python dapat dengan mudah mengetahui berapa banyak batch yang telah dilakukan. Mengapa repot-repot memiliki tensorflow untuk mempertahankan penghitung seperti itu?
victorx
1
pengoptimal memvariasikan konstanta itu berdasarkan langkah global @xwk
martianwars
24
untuk menjawab pertanyaan xwk, saya rasa jika Anda menghentikan pelatihan setelah 100 iterasi, dan hari berikutnya memulihkan model dan menjalankan 100 iterasi lagi. Sekarang langkah global Anda adalah 200, tetapi proses kedua memiliki nomor iterasi lokal dari 1 hingga 100, yang bersifat lokal untuk proses tersebut, versus langkah iterasi global. Jadi langkah global mencatat jumlah total iterasi, mungkin digunakan untuk mengubah kecepatan pemelajaran atau hyperparameter lainnya.
Wei Liu
6
Untuk mengembangkan jawaban Wei Liu, langkah global juga berguna untuk melacak kemajuan tugas TensorFlow yang didistribusikan. Karena pekerja melihat batch secara bersamaan, perlu ada mekanisme untuk melacak jumlah total batch yang dilihat. Ini adalah cara StopAtStepHook beroperasi misalnya.
Malo Marrec
4

The global_step Variablememegang jumlah langkah selama pelatihan di seluruh tugas (masing-masing indeks langkah akan terjadi hanya pada satu tugas).

Garis waktu yang dibuat oleh global_stepmembantu kita memahami posisi kita dalam skema besar, dari setiap tugas secara terpisah. Misalnya, kerugian dan keakuratan dapat diplotkan global_stepdi Tensorboard.

envy_intelligence
sumber
4

tunjukkan contoh nyata di bawah ini:

kode:

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()))

cetakan yang sesuai

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
yichudu
sumber
1

Ada jaringan, misalnya GAN, yang mungkin memerlukan dua (atau lebih) langkah berbeda. Melatih GAN dengan spesifikasi WGAN mensyaratkan bahwa langkah-langkah pada diskriminator (atau kritik) D lebih dari yang dilakukan pada generator G. Dalam hal ini, berguna untuk mendeklarasikan variabel global_steps yang berbeda.

Contoh: ( G_lossdan D_lossapakah generator dan diskriminator hilang)

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)
Luca Di Liello
sumber