报错信息之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库版本不同,在使用该库运行程序训练网络模型的时候会出现报错的情况,小伙伴们可以参考上述方法进行改进之。
写到这里,差不多本文就要结束了,如果有问题可以在下方留言区留言交流。如果我的这篇文章帮助到了你,那我也会感到很高兴,一个人能走多远,在于与谁同行。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/221809.html原文链接:https://javaforall.net
