首先,之所以会出现KeyError: ‘accuracy’、KeyError: ‘acc’、KeyError: 'val_acc’等报错信息,是由于keras库(一个开源人工神经网络库,用于构建和训练深度学习模型的高级 API)版本不同所造成的,下面分别就其进行简述之。

报错信息之KeyError: ‘accuracy’

首先抛出报错信息,如下:

Traceback (most recent call last):
File "**/train.py", line 90, in <module>
plt.plot(N, H.history["accuracy"], label="train_acc")
KeyError: 'accuracy'

这个是在神经网络模型在训练的时候所报的错误,报错信息是个好东西,你要学会如何从报错信息中发掘出有用的东西来。根据错误信息的提示找到对应的代码行所在:

plt.figure()
plt.plot(N, H.history["loss"], label="train_loss")
plt.plot(N, H.history["val_loss"], label="val_loss")
plt.plot(N, H.history["accuracy"], label="train_acc")
plt.plot(N, H.history["val_accuracy"], label="val_acc")
plt.title("Training Loss and Accuracy")

后来发现症结所在,之所以会报错,是因为keras库老版本中的参数不是accuracy,而是acc,将参数accuracy替换为acc,修改过的代码如下:

plt.figure()
plt.plot(N, H.history["loss"], label="train_loss")
plt.plot(N, H.history["val_loss"], label="val_loss")
plt.plot(N, H.history["acc"], label="train_acc")
plt.plot(N, H.history["val_acc"], label="val_acc")
plt.title("Training Loss and Accuracy")

对的,你没看错,只是修改了这一个地方,就直接药到病除了。

报错信息之KeyError: 'val_acc’和KeyError: ‘acc’

之所以会将这两个报错信息放到一起来讲解,是因为这个错误是同一个原因所造成的。首先分别抛出这两个错误的报错信息,如下:

Traceback (most recent call last):
  File "Training.py", line 110, in <module>
    nb_val_samples=nb_val_samples)
  File "/usr/local/python3/lib/python3.6/site-packages/keras/legacy/interfaces.py", line 91, in wrapper
    return func(*args, **kwargs)
  File "/usr/local/python3/lib/python3.6/site-packages/keras/engine/training.py", line 1732, in fit_generator
    initial_epoch=initial_epoch)
  File "/usr/local/python3/lib/python3.6/site-packages/keras/engine/training_generator.py", line 260, in fit_generator
    callbacks.on_epoch_end(epoch, epoch_logs)
  File "/usr/local/python3/lib/python3.6/site-packages/keras/callbacks/callbacks.py", line 152, in on_epoch_end
    callback.on_epoch_end(epoch, logs)
  File "/usr/local/python3/lib/python3.6/site-packages/keras/callbacks/callbacks.py", line 702, in on_epoch_end
    filepath = self.filepath.format(epoch=epoch + 1, **logs)
KeyError: 'val_acc'

Traceback (most recent call last):
  File "Training.py", line 130, in <module>
    plot_training(history_ft)
  File "Training.py", line 114, in plot_training
    acc = history.history['acc']
KeyError: 'acc'

同样的方法,先根据报错找到对应的代码行错误所在。由于keras库版本的不同,这次将acc改为accuracy之后,就药到病除了。

Conclusion 总结

综上所述,由于不同电脑中的keras库版本不同,在使用该库运行程序训练网络模型的时候会出现报错的情况,小伙伴们可以参考上述方法进行改进之。

写到这里,差不多本文就要结束了,如果有问题可以在下方留言区留言交流。如果我的这篇文章帮助到了你,那我也会感到很高兴,一个人能走多远,在于与谁同行

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐