我有以下课程,其中我尝试获取包含每次培训的损失和验证损失的元组列表
class LossHistory(keras.callbacks.Callback):
def on_train_begin(self, logs={}):
self.losses = []
def on_batch_end(self, batch, logs={}):
self.losses.append((logs.get('loss'), logs.get('val_loss')))
我在
之前初始化LossHistory对象history = LossHistory()
然后我按照以下方式将它传递给我模型上的fit方法
regressor.fit(X_train, y_train, batch_size=32, epochs=200, validation_split = 0.2, callbacks = [history])
问题是,当我尝试获取history.losses[0][1]
时,返回值为noneType且不应该
我不知道我在这里做错了什么,我有点坚持这段时间。
答案 0 :(得分:0)
我的回答来晚了,但是可能可以帮助别人。
在每个批处理的末尾都会调用on_batch_end,目前我们没有val_loss。 val_loss在每个时期的末尾而不是每个批次计算。 如果您还希望在每个批处理的末尾都包含val_loss,则应该对其进行计算,但要注意,这会减慢执行速度。 也许您可以做类似的事情:
您应该在您的课程中添加一个初始化:
def __init__(self, validation_data):
self.validation_data = validation_data
self.val_losses = []
def on_batch_end(self, batch, logs={}):
x, y = self.validation_data
val_loss, val_acc = self.model.evaluate(x, y, verbose=0)
self.val_losses.append(val_loss)
self.losses.append(logs.get('loss'))