Столкнувшись с проблемой получения значения точности и точности проверки в конце эпохи

Я создаю модель, используя resnet для набора данных mnist. На самом деле мне нужно несколько графиков для работы. Полный код находится здесь.

Графики, которые мне нужны,

  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,........]

В чем проблема? Как избавиться от этого?


person Kazi Ziaul Hassan    schedule 18.11.2020    source источник
comment
Есть ли у вашей модели показатель точности? Включите код обучения.   -  person Dr. Snoopy    schedule 18.11.2020
comment
@Dr.Snoopy, полный код был включен в первую часть сообщения. Вот.   -  person Kazi Ziaul Hassan    schedule 18.11.2020
comment
Нет, ваш код должен быть в вопросе, а не как внешняя ссылка.   -  person Dr. Snoopy    schedule 18.11.2020
comment
Возможно, что метрика является точностью, а не соотв.   -  person Dr. Snoopy    schedule 18.11.2020
comment
@Dr.Snoopy Dr.Snoopy Я пытался отформатировать весь свой код, чтобы включить его в сообщение. Это очень обременительно. Мне жаль. Это может занять много времени.   -  person Kazi Ziaul Hassan    schedule 18.11.2020
comment
Вот почему я просто говорю код обучения, а также прокомментировал, что имя метрики в вашем вызове logs.get может быть другим.   -  person Dr. Snoopy    schedule 18.11.2020


Ответы (1)


Обновите название показателей точности ("accuracy" вместо "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'))

Полный код смотрите в обновленной блокноте.

person Imran Rana    schedule 18.11.2020
comment
Большое спасибо @Imran Rana, сэр. Понятно. - person Kazi Ziaul Hassan; 18.11.2020