Keras提前停止回调错误,val_损失度量不可用

2024-05-11 12:04:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在训练一个Keras(Tensorflow backend,Python,在MacBook上)并且在fit_generator函数中得到一个提前停止回调的错误。错误如下:

RuntimeWarning: Early stopping conditioned on metric `val_loss` which is not available. Available metrics are:
  (self.monitor, ','.join(list(logs.keys()))),
RuntimeWarning: Can save best model only with val_acc available, skipping.

'skipping.' % (self.monitor), RuntimeWarning
[local-dir]/lib/python3.6/site-packages/keras/callbacks.py:497: RuntimeWarning: Early stopping conditioned on metric `val_loss` which is not available. Available metrics are:
  (self.monitor, ','.join(list(logs.keys()))), RuntimeWarning
[local-dir]/lib/python3.6/site-packages/keras/callbacks.py:406: RuntimeWarning: Can save best model only with val_acc available, skipping.
  'skipping.' % (self.monitor), RuntimeWarning)
Traceback (most recent call last):
  :
  [my-code]
  :
  File "[local-dir]/lib/python3.6/site-packages/keras/legacy/interfaces.py", line 91, in wrapper
return func(*args, **kwargs)
  File "[local-dir]/lib/python3.6/site-packages/keras/engine/training.py", line 2213, in fit_generator
callbacks.on_epoch_end(epoch, epoch_logs)
  File "[local-dir]/lib/python3.6/site-packages/keras/callbacks.py", line 76, in on_epoch_end
callback.on_epoch_end(epoch, logs)
  File "[local-dir]/lib/python3.6/site-packages/keras/callbacks.py", line 310, in on_epoch_end
self.progbar.update(self.seen, self.log_values, force=True)
AttributeError: 'ProgbarLogger' object has no attribute 'log_values'

我的代码如下(看起来不错):

:
ES = EarlyStopping(monitor="val_loss", min_delta=0.001, patience=3, mode="min", verbose=1)
:
self.model.fit_generator(
        generator        = train_batch,
        validation_data  = valid_batch,
        validation_steps = validation_steps,
        steps_per_epoch  = steps_per_epoch,
        epochs           = epochs,
        callbacks        = [ES],
        verbose          = 1,
        workers          = 3,
        max_queue_size   = 8)

错误消息似乎与提前停止回调有关,但回调看起来正常。同时,这个错误还指出,价值损失是不适当的,但我不知道为什么。。。另一个不寻常的地方是,错误只在我使用较小的数据集时发生。

如有任何帮助,我们将不胜感激。


Tags: pyselfonlibpackageslocal错误dir
3条回答

如果错误仅在使用较小的数据集时发生,则很可能使用的数据集太小,以至于验证集中没有一个样本。

因此无法计算验证损失。

这个错误发生在我们身上,因为我们在使用'callbacks': [keras.callbacks.EarlyStopping(monitor='val_loss', patience=1)],时忘记在fit()方法中设置验证数据

导致错误的代码是:

self.model.fit(
        x=x_train,
        y=y_train,
        callbacks=[keras.callbacks.EarlyStopping(monitor='val_loss', patience=1)],
        verbose=True)

在fit()中添加validation_data=(self.x_validate, self.y_validate),已修复:

self.model.fit(
        x=x_train,
        y=y_train,
        callbacks=[keras.callbacks.EarlyStopping(monitor='val_loss', patience=1)],
        validation_data=(x_validate, y_validate),
        verbose=True)

我对前面的答案投了赞成票,因为它让我有了检验数据和对fit_generator函数的输入的洞察力,并找出问题的根本原因。总之,在数据集很小的情况下,我计算了validation_stepssteps_per_epoch,结果是零(0),这导致了错误。

我想,也许对Keras团队来说,更好的长期答案是,当这些值为零时,在fit_generator中导致错误/异常,这可能有助于更好地理解如何解决这个问题。

相关问题 更多 >