试图通过训练模型来获得val_loss

时间:2017-10-11 18:14:18

标签: python python-3.x keras theano

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

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且不应该

我不知道我在这里做错了什么,我有点坚持这段时间。

1 个答案:

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