简体   繁体   English

使用 tensorflow keras 训练模型时,如何每 10 个 epoch 打印一个日志行?

[英]How to print one log line per every 10 epochs when training models with tensorflow keras?

When I fit the model with:当我拟合模型时:

model.fit(X, y, epochs=40, batch_size=32, validation_split=0.2, verbose=2) it prints one log line for each epoch as: model.fit(X, y, epochs=40, batch_size=32, validation_split=0.2, verbose=2)它为每个 epoch 打印一个日志行:

Epoch 1/100
0s - loss: 0.2506 - acc: 0.5750 - val_loss: 0.2501 - val_acc: 0.3750
Epoch 2/100
0s - loss: 0.2487 - acc: 0.6250 - val_loss: 0.2498 - val_acc: 0.6250
Epoch 3/100
0s - loss: 0.2495 - acc: 0.5750 - val_loss: 0.2496 - val_acc: 0.6250
.....

How can I print the log line per very 10 epochs as follows?如何每 10 个 epoch 打印日志行,如下所示?

Epoch 10/100
0s - loss: 0.2506 - acc: 0.5750 - val_loss: 0.2501 - val_acc: 0.3750
Epoch 20/100
0s - loss: 0.2487 - acc: 0.6250 - val_loss: 0.2498 - val_acc: 0.6250
Epoch 30/100
0s - loss: 0.2495 - acc: 0.5750 - val_loss: 0.2496 - val_acc: 0.6250
.....

This callback will create and write on a log text file what you want:此回调将创建并在日志文本文件中写入您想要的内容:

log_path = "text_file_name.txt" # it will be created automatically

class print_training_on_text_every_10_epochs_Callback(Callback):
  def __init__(self, logpath):
    self.logpath = logpath

  def on_epoch_end(self, epoch, logs=None):
    with open(self.logpath, 'a') as writefile: # put log_path here
      with redirect_stdout(writefile):
        if(int(epoch) % 10) == 0:
          print("Epoch: {:>3} | Loss: ".format(epoch) + f"{logs['loss']:.4e}" + " | Valid loss: " + f"{logs['val_loss']:.4e}")
          writefile.write("\n")

my_callbacks = [
  print_training_on_text_every_10_epochs_Callback(logpath=log_path),
  ]

You want to call it like this.你想这样称呼它。

model.fit(training_dataset, epochs=60, validation_data=validation_dataset, callbacks=my_callbacks)

The text file will be updated only after 10 epochs have passed文本文件将仅在 10 个 epoch 过去后更新

This is what i get on the text file这就是我在文本文件中得到的

Epoch:   0 | Loss: 5.3454e+00 | Valid loss: 4.2420e-01

Epoch:  10 | Loss: 3.1342e-02 | Valid loss: 3.4554e-02

Epoch:  20 | Loss: 1.6330e-02 | Valid loss: 2.2512e-02

The first epoch is numbered 0, the second 1 and so on.第一个时期编号为 0,第二个时期编号为 1,依此类推。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM