键错误:'val_acc'

Posted

技术标签:

【中文标题】键错误:\'val_acc\'【英文标题】:KeyError: 'val_acc'键错误:'val_acc' 【发布时间】:2020-01-28 00:57:18 【问题描述】:

以下是 model.fit_generator() 函数的一些参数。这些对象保存在标有回调的列表中。

checkpoint = ModelCheckpoint(
        model_file, 
        monitor= 'val_acc', 
        save_best_only=True)

early_stopping = EarlyStopping(
    monitor='val_loss',
    patience=5,
    verbose=1,
    restore_best_weights=True)


tensorboard = TensorBoard(
    log_dir=log_dir,
    batch_size=batch_size,
    update_freq = 'batch')


reduce_lr = ReduceLROnPlateau(
    monitor='val_loss',
    patience=5,
    cooldown=2,
    min_lr=0.0000000001,
    verbose=1)


#-----------------------------------------------------------------------------------------------------------------#
callbacks = [checkpoint, reduce_lr, early_stopping, tensorboard]

为对象创建回调对象和参数后,我实现层并编译(未显示,因为它与我遇到的问题无关)。然后我运行 model.fit_generator 函数(它使用上面的回调参数):

history = model.fit_generator(
    train_generator,
    steps_per_epoch = steps_per_epoch,
    epochs=epochs,
    verbose=2,
    callbacks=callbacks,
    validation_data=validation_generator,
    validation_steps=validation_steps,
    class_weight=class_weight)

我得到的错误是:

KeyError: 'val_acc'

据我了解,这意味着 val_acc 不在列表中。但它是..所以需要帮助来理解我为什么会收到这个错误。

编辑:

报错前的结果图片..[https://i.stack.imgur.com/5lheg.png]

【问题讨论】:

val_accuracy... 您能粘贴每个时期打印的内容吗? @SayanipDutta 我包含了在错误停止训练之前得到的结果。 很明显,你需要输入val_accuracy notval_acc 【参考方案1】:

确保您使用的是model.compile(metrics=['accuracy']),而不是Accuracyacc。 同样在文件路径中使用val_accuracy。 我最近遇到了这个问题。

【讨论】:

【参考方案2】:

你需要把monitor= 'val_acc'改成monitor='val_loss'

checkpoint = ModelCheckpoint(
        model_file, 
        monitor='val_loss', 
        save_best_only=True)

【讨论】:

以上是关于键错误:'val_acc'的主要内容,如果未能解决你的问题,请参考以下文章

“val_acc”根本没有改变

为啥我的 acc 总是更高但我的 val_acc 很小?

LSTM 时间序列分类 val_acc 固定或小于 0.5

Keras 图像分类 - 验证数据集的预测准确性与 val_acc 不匹配

Keras:训练和验证集上的 model.evaluate() 与上次训练时期后的 acc 和 val_acc 不同

Keras 教程示例 cifar10_cnn.py 在 windows 10 上的 200 个 epoch 中给出 acc: 0.34 val_acc: 0.40?