Global_step có nghĩa là gì trong Tensorflow?


88

Trong đây là mã hướng dẫn từ trang web TensorFlow,

  1. bất cứ ai có thể giúp giải thích global_stepnghĩa là gì?

    Tôi tìm thấy trên trang web Tensorflow viết rằng bước toàn cầu được sử dụng là các bước đào tạo về số lượng , nhưng tôi không hiểu chính xác ý nghĩa của nó.

  2. Ngoài ra, số 0 có ý nghĩa gì khi thiết lập 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

Theo Tensorflow doc global_step: tăng một sau khi các biến đã được cập nhật . Điều đó có nghĩa là sau một lần cập nhật global_stepsẽ trở thành 1?

Câu trả lời:


110

global_stepđề cập đến số lô mà biểu đồ nhìn thấy. Mỗi khi cung cấp một lô, trọng lượng được cập nhật theo hướng giảm thiểu sự hao hụt. global_stepchỉ cần theo dõi số lô đã thấy từ trước đến nay. Khi nó được truyền vào minimize()danh sách đối số, biến sẽ tăng lên một. Có một cái nhìn vào optimizer.minimize().

Bạn có thể nhận được global_stepgiá trị bằng cách sử dụng tf.train.global_step(). Cũng tiện dụng là các phương pháp tiện ích tf.train.get_global_stephoặc tf.train.get_or_create_global_step.

0 là giá trị ban đầu của bước toàn cục trong ngữ cảnh này.


Cảm ơn! Trong liên kết bạn cung cấp, tf.train.global_step()giá trị global_step_tensorđược đặt thành 10. Điều đó có nghĩa là 10 lô đã được nhìn thấy bằng biểu đồ?
GabrielChu

9
@martianwars, tôi vẫn chưa hiểu được global_step. Không phải vòng lặp cho các lô được điều khiển bởi chính chương trình python, vì vậy chương trình python có thể dễ dàng biết có bao nhiêu lô đã được thực hiện. Tại sao phải bận tâm đến tensorflow để duy trì một bộ đếm như vậy?
victorx

1
tối ưu varys hằng của nó dựa trên bước @xwk toàn cầu
martianwars

24
để trả lời câu hỏi của xwk, tôi nghĩ nếu bạn ngừng đào tạo sau 100 lần lặp và ngày hôm sau hãy khôi phục mô hình và chạy thêm 100 lần lặp nữa. Bây giờ bước toàn cầu của bạn là 200, nhưng lần chạy thứ hai có số lần lặp cục bộ từ 1 đến 100, là số cục bộ cho lần chạy đó, so với bước lặp lại toàn cục. Vì vậy, bước toàn cục ghi lại tổng số lần lặp, có thể được sử dụng để thay đổi tốc độ học hoặc siêu tham số khác.
Wei Liu

6
dựa trên câu trả lời của Wei Liu, các bước toàn cầu cũng hữu ích để theo dõi tiến độ của các công việc TensorFlow được phân phối. Khi công nhân đồng thời xem các lô, cần phải có một cơ chế để theo dõi tổng số lô được xem. Đây là cách hoạt động của StopAtStepHook chẳng hạn.
Malo Marrec

4

cho bạn xem một mẫu sinh động dưới đây:

mã:

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

bản in tương ứng

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

3

Giá trị này global_step Variablechứa tổng số bước trong quá trình đào tạo trên các nhiệm vụ (mỗi chỉ số bước sẽ chỉ xảy ra trên một nhiệm vụ duy nhất).

Dòng thời gian được tạo bởi global_stepgiúp chúng tôi hiểu biết chúng tôi đang ở đâu trong kế hoạch tổng thể, từ từng nhiệm vụ riêng biệt. Ví dụ, sự mất mát và độ chính xác có thể được vẽ global_steptrên Tensorboard.


1

Có những mạng, ví dụ như GAN, có thể cần hai (hoặc nhiều) bước khác nhau. Việc đào tạo một GAN với đặc tả WGAN yêu cầu các bước trên bộ phân biệt (hoặc chỉ trích) D nhiều hơn các bước được thực hiện trên bộ tạo G. Trong trường hợp đó, việc khai báo các biến global_steps khác nhau là hữu ích.

Ví dụ: ( G_lossD_losslà sự mất mát của máy phát và bộ phân biệt)

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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.