我正在用keras训练一个模型,并且在fit_generator函数的回调中得到一个错误。我总是运行到epoch 3rd并得到这个错误
annotation_path = 'train2.txt'
log_dir = 'logs/000/'
classes_path = 'model_data/deplao_classes.txt'
anchors_path = 'model_data/yolo_anchors.txt'
class_names = get_classes(classes_path)
num_classes = len(class_names)
anchors = get_anchors(anchors_path)
input_shape = (416,416) # multiple of 32, hw
is_tiny_version = len(anchors)==6 # default setting
if is_tiny_version:
model = create_tiny_model(input_shape, anchors, num_classes,
freeze_body=2, weights_path='model_data/tiny_yolo_weights.h5')
else:
model = create_model(input_shape, anchors, num_classes,
freeze_body=2, weights_path='model_data/yolo_weights.h5') # make sure you know what you freeze
logging = TensorBoard(log_dir=log_dir)
checkpoint = ModelCheckpoint(log_dir + 'ep{epoch:03d}-loss{loss:.3f}-val_loss{val_loss:.3f}.h5',
monitor='val_loss', save_weights_only=True, save_best_only=True, period=3)
reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=3, verbose=1)
early_stopping = EarlyStopping(monitor='val_loss', min_delta=0, patience=10, verbose=1)
[error]
Traceback (most recent call last):
File "train.py", line 194, in <module>
_main()
File "train.py", line 69, in _main
callbacks=[logging, checkpoint])
File "C:\Users\ilove\AppData\Roaming\Python\Python37\lib\site-packages\keras\legacy\interfaces.py", line 91, in wrapper
return func(*args, **kwargs)
File "C:\Users\ilove\AppData\Roaming\Python\Python37\lib\site-packages\keras\engine\training.py", line 1418, in fit_generator
initial_epoch=initial_epoch)
File "C:\Users\ilove\AppData\Roaming\Python\Python37\lib\site-packages\keras\engine\training_generator.py", line 251, in fit_generator
callbacks.on_epoch_end(epoch, epoch_logs)
File "C:\Users\ilove\AppData\Roaming\Python\Python37\lib\site-packages\keras\callbacks.py", line 79, in on_epoch_end
callback.on_epoch_end(epoch, logs)
File "C:\Users\ilove\AppData\Roaming\Python\Python37\lib\site-packages\keras\callbacks.py", line 429, in on_epoch_end
filepath = self.filepath.format(epoch=epoch + 1, **logs)
KeyError: 'val_loss'
有谁能找出问题来帮我吗?
先谢谢你的帮助。
9条答案
按热度按时间3npbholx1#
这个回调在迭代3结束时运行。
错误消息声称执行以下命令时
logs
变量中没有瓦尔_loss:如果在没有validation_data的情况下调用fit,则会发生这种情况。
我将从简化模型检查点的路径名开始,在名称中包含epoch可能就足够了。
mcdcgff02#
这个答案不适用于这个问题,但它在谷歌搜索结果的顶部,所以我将分享我的问题的解决方案。
我也犯了同样的错误:在检查点文件名中使用
val_loss
时,我会收到以下错误:KeyError: 'val_loss'
。我的检查指针也在监视这个字段,所以即使我把这个字段从文件名中去掉,我仍然会从检查指针中得到这个警告:WARNING:tensorflow:Can save best model only with val_loss available, skipping.
在我的例子中,问题是我从单独使用Keras和Tensorflow 1升级到使用Tensorflow 2附带的Keras。
ModelCheckpoint
的period
参数被替换为save_freq
。我错误地认为save_freq
的行为方式相同,所以我将其设置为save_freq=1
,以为这样可以保存每一个史诗。然而,docs状态:保存频率:“epoch”或整数。使用“epoch”时,回调在每个epoch后保存模型。使用整数时,回调在批处理结束时保存模型,在该批处理结束时,自上次保存以来已看到这么多样本。请注意,如果保存未与epoch对齐,则监视的度量可能不太可靠(它可能只反映1个批次,因为指标会在每个时期重置)。默认为'epoch'
设置
save_freq='epoch'
为我解决了这个问题。注意:操作员仍在使用period=1
,因此这绝对不是导致问题的原因jfgube3f3#
在文件路径和检查点中使用
val_accuracy
。如果它仍然没有改善,只需重新启动PC或colab。ki1q1bka4#
当我们未向模型提供确认数据并检查model.fit_generator(或model.fit)的参数(train_data、steps_per_epoch、validation_data、validation_steps、epoch、initial_epoch、回调)时,会发生此错误
gz5pxeao5#
对我来说,问题是我试图将
initial_epoch
(model.fit
中)设置为标准0以外的值。我这样做是因为我在循环中运行model.fit
,每个循环运行10个历元,然后检索历史数据,检查损耗是否减少,并再次运行model.fit
,直到满足要求。我以为我必须更新的值,因为我是重新启动以前的模型,但显然没有...
w6mmgewl6#
在我的情况下,瓦尔_generator被打破时,colab笔记本试图从谷歌驱动器读取图像。所以我运行细胞创建val_generator再次和它的工作
i34xakig7#
我有这个错误,并没有设法找到错误的原因在任何地方在线.
在我的例子中,我要求的训练样本比实际拥有的要多,TF没有给予我一个明确的错误,它甚至为我提供了一个保存的损失值,我只收到了深奥的KeyError:“瓦尔_loss”时尝试保存。
希望这有助于有人嗅出他们愚蠢的错误,如果这是发生在他们身上。
wxclj1h58#
应添加此参数validation_data=(x_test,y_test)以拟合模型
tzdcorbm9#
我不知道这是否在所有情况下都有效。但是,对我来说,我重新启动了我的电脑,它似乎工作。