试图通过训练模型获得 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'))
我有以下 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'))