如何在 Tensorflow 深度学习期间测量每批次的训练时间?

How to measure training time per batches during Deep Learning in Tensorflow?

我想测量 Tensorflow 深度学习期间每批次的训练时间。 有几种方法可以衡量每个时期的训练时间,但我找不到如何衡量每个批次的训练时间。

我试过 Tensorboard,但我不知道如何在 Tensorboard 回调中添加某种 'execution time' 标量。

我也尝试覆盖函数 'train_step' 但它没有按我想要的方式工作。

您可以通过创建 keras 自定义回调来执行此操作。下面的代码将打印出处理每个批次所需的时间、该批次的训练精度和该批次的损失

class batch_timer(keras.callbacks.Callback):
    def __init__(self  ):
        super(batch_timer, self).__init__()
        
    def on_train_batch_begin(self, batch, logs=None):
        self.start_time=time.time()    
    def on_train_batch_end(self, batch, logs=None):
        stop_time=time.time()
        duration =stop_time-self.start_time
        acc=logs.get('accuracy')* 100  # get training accuracy 
        loss=logs.get('loss')
        msg='processing batch {0:6s}  duration= {1:12.4f}  accuracy= {2:8.3f}  loss: {3:8.5f}'.format(str(batch), duration,  acc, loss)
        print(msg ) 

现在您将获得大量数据。当您 运行 model.fit 包含

history=model.fit(etc.... ,verbose=0, callbacks=[batch_timer()]

我设置了 verbose=0,因为如果你不设置,打印输出会有点乱,因为 model.fit 打印被回调打印弄乱了