我正在使用Tensorflow-Keras训练神经网络。我当前的代码被设置为使用CSVLogger来跟踪历次的进度,并使用matplotlib pyplot来绘制训练和验证的准确率和损失。对于这两个曲线图,值也是根据纪元#绘制的。
是否可以绘制我的模型随时间的训练进度图?意思是说,我可以使用执行时间而不是使用epoch #作为x轴吗?
这样做的原因是,我正在进行提前停止的超参数调整,因此每个模型可能会在不同的时期停止,但同时由于体系结构和配置的不同,每个时期的平均执行时间也可能不同。
因此,对我来说,比较不同模型的损失和准确性需要多长时间才能收敛,以及提前停止的发生,而不是纪元的数量,对我来说可能更有意义。毕竟,如果模型A可以在20个时期内以每个时期2分钟的速率在20个时期内达到最好的val_loss为0.275,我真的想选择它而不是模型B在停止之前在50个时期以20秒的速率达到0.275的最佳val_loss吗?
发布于 2019-10-07 01:15:35
是的,这是可能的。为此,您可以创建自己的Keras Callback。为此,您必须扩展Callback类。我已经创建了一个非常简单的回调来演示如何跟踪每个时期的数据和时间以及模型的分数。
# Import dependencies
import datetime
from tensorflow.keras import callbacks
# Create new callback
class MyHistory(callbacks.Callback):
"""Adapted from https://github.com/keras-team/keras/blob/master/keras/callbacks/callbacks.py#L614"""
def on_train_begin(self, logs=None):
self.epoch = []
self.timestamps = []
self.history = {}
def on_epoch_end(self, epoch, logs=None):
logs = logs or {}
self.epoch.append(epoch)
self.timestamps.append(datetime.datetime.now())
for k, v in logs.items():
self.history.setdefault(k, []).append(v)
# Instantiate callback
myHistory = MyHistory()
# Train model using callback
model.fit(..., callbacks=[myHistory])
# Print timestamps & losses
print(myHistory.timestamps)
print(myHistory.history['loss'])
您可以采用类似的方法将时间戳存储在csv中,方法是以类似的方式扩展[CSVLogger][3]
。
https://stackoverflow.com/questions/58259350
复制相似问题