试图通过训练模型获得 val_loss

Trying to get the val_loss from training a model

我有以下 class,其中我尝试获取包含每次训练的损失和验证损失的元组列表

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] 时,值 return 是一个 noneType,它不应该是

我不知道我做错了什么,我在这上面停留了一段时间。

我的回答晚了,但可能对其他人有帮助。

on_batch_end在每批结束时调用,此时我们没有val_loss。 val_loss 是在每个纪元结束时计算的,而不是每个批次。 如果你想在每个批次的末尾也有 val_loss 你应该计算它,但要注意它会减慢执行速度。 也许你可以这样做:

你应该给你的 class 添加一个 init:

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