为啥我有 KeyError:'val_acc'?

Posted

技术标签:

【中文标题】为啥我有 KeyError:\'val_acc\'?【英文标题】:Why am I having KeyError: 'val_acc'?为什么我有 KeyError:'val_acc'? 【发布时间】:2019-07-03 06:50:43 【问题描述】:

在我的 Keras 代码中,我执行了以下操作:

model.compile(loss='binary_crossentropy', optimizer=optimizer, metrics=['accuracy'])
history = model.fit(border_irregularity_features,y, epochs=5, batch_size=1, validation_split=0.33)
...
...
accuracy = history.history['acc']
val_acc = history.history['val_acc']

但是,我遇到了以下错误:

val_acc = history.history['val_acc']
KeyError: 'val_acc'

这是为什么呢?我错过了什么?

谢谢。

EDIT-1

当我这样做时:

print history.history.keys()

我明白了:

['acc', 'loss', 'val_acc', 'val_loss']

【问题讨论】:

history.history 没有名为“val_acc”的键。您可以安全地尝试使用history.history.get('val_acc', None) 使用get 键,如果缺少键,None 是默认值。如果您在尝试获取特定密钥之前需要知道名称,您可能需要 print 所有密钥:print(history.history.keys()),假设 history.historydict 的一个实例 无法使用 MNIST 数据重现您的错误;能否请您发布history.history 的结果以及您的 Keras 版本? 感谢您的友好回复。请参阅EDIT-1 您确定错误的来源在以下行吗? val_acc = history.history['val_acc'] 改成val_acc = history.history['val_loss'] 会不会出现同样的错误? 【参考方案1】:

从 tensorflow 2 开始,历史键如下:(['val_loss', 'val_accuracy', 'val_precision', 'val_recall', 'loss', 'accuracy', 'precision', 'recall'])

【讨论】:

【参考方案2】:

代码本身似乎没有问题。我已经从我拥有的另一个脚本中复制了部分代码。我只是擦掉了“val_acc”和“val_loss”中的下划线,然后再次输入,就成功了!

在复制和粘贴时可能嵌入了一些特殊字符?

【讨论】:

以上是关于为啥我有 KeyError:'val_acc'?的主要内容,如果未能解决你的问题,请参考以下文章

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

为啥我收到此错误? KeyError:“没有”

为啥 str(KeyError) 添加额外的引号?

“val_acc”根本没有改变

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

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