首页 > 解决方案 > 在 epoch 结束时获取准确度和验证准确度的值时面临的问题

问题描述

我正在 mnist 数据集上使用resnet构建模型。实际上我需要一些图表来处理。完整的代码在这里

我需要的图表是,

  1. 时期与验证损失
  2. 时期与训练损失
  3. 时期与验证准确性
  4. 时期与训练准确性

我得到了前两个图表。但我没有画出其余的。当我尝试绘制它们时会发生以下事情。

我建立了一个类来存储 4 个值(验证损失、训练损失、验证准确度、训练准确度)。代码如下。

class LossHistory(Callback):
def on_train_begin(self, logs={}):
    self.losses = []
    self.val_losses = []
    self.acc = []
    self.val_acc = []
    
def on_epoch_end(self, batch, logs={}):
    self.losses.append(logs.get('loss'))
    self.val_losses.append(logs.get('val_loss'))
    self.acc.append(logs.get('acc'))
    print(logs.get('acc'))                  """ Showing "None" """
    self.val_acc.append(logs.get('val_acc'))
    print(logs.get('val_acc'))              """ Showing "None" """

培训结束后...

predictions, history = run_resNet()

当我做...

print(history.acc)
print(history.val_acc)

我得到的输出...

[None, None, None, None, None,........]
[None, None, None, None, None,........]

有什么问题?如何摆脱它?

标签: pythonkerasneural-networkcallbackresnet

解决方案


当您尝试从日志中获取准确度指标时,请更新其名称(“准确度”而不是“acc”),如下所示:

def on_epoch_end(self, batch, logs={}):
    self.losses.append(logs.get('loss'))
    self.val_losses.append(logs.get('val_loss'))
    self.acc.append(logs.get('accuracy'))
    print(logs.get('accuracy'))
    self.val_acc.append(logs.get('val_accuracy'))
    print(logs.get('val_accuracy'))

检查更新的笔记本以获取完整的代码。


推荐阅读