Eri*_*oda 4 python keras tensorflow
我正在训练Keras(在MacBook上为Tensorflow后端,Python),并且在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'
Run Code Online (Sandbox Code Playgroud)
我的代码如下(看起来不错):
:
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)
Run Code Online (Sandbox Code Playgroud)
该错误消息似乎与提早停止的回调有关,但该回调看起来不错。该错误还指出val_loss不适合,但是我不确定为什么...关于这一点的另一件事是,该错误仅在使用较小的数据集时发生。
任何帮助表示赞赏。
错误发生在我们身上,因为我们忘记在 fit() 方法中设置validation_data,而使用 'callbacks': [keras.callbacks.EarlyStopping(monitor='val_loss', patience=1)],
导致错误的代码是:
self.model.fit(
x=x_train,
y=y_train,
callbacks=[keras.callbacks.EarlyStopping(monitor='val_loss', patience=1)],
verbose=True)
Run Code Online (Sandbox Code Playgroud)
添加validation_data=(self.x_validate, self.y_validate),
fit() 固定:
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)
Run Code Online (Sandbox Code Playgroud)
我投票赞成前面的答案,因为它可以让我深入了解数据和fit_generator
功能输入,并找出问题的根本原因。总之,在我的数据集小的情况下,我计算validation_steps
和steps_per_epoch
这竟然是零(0),这引起了错误。
我认为对于Keras团队来说,更好的长期答案是在fit_generator
这些值均为零时导致错误/异常,这可能会导致对如何解决此问题有更好的理解。