9

Я тренирую RNN, используя keras, и хотел бы видеть, как точность проверки изменяется с размером набора данных. У Keras есть список, называемый val_acc в его объекте истории, который добавляется после каждой эпохи с соответствующей точностью проверки достоверности (link to the post in google group). Я хочу получить среднее значение val_acc за количество прогонов эпох и график, соответствующий размеру соответствующего набора данных.Как построить кривую обучения для эксперимента в керасе?

Вопрос: Как я могу получить элементы в val_acc списке и выполнить операцию как numpy.mean(val_acc)?


EDIT: Как сказал @runDOSrun, получив среднее из val_acc с не имеет смысла. Позвольте мне сосредоточиться на получении финала val_acc.

Я пробовал, что было предложено @nemo, но не повезло. Вот что я получил, когда я печатаю

model.fit(X_train, y_train, batch_size = 512, nb_epoch = 5, validation_split = 0.05).__dict__

выход:

{'model': <keras.models.Sequential object at 0x000000001F752A90>, 'params': {'verbose': 1, 'nb_epoch': 5, 'batch_size': 512, 'metrics': ['loss', 'val_loss'], 'nb_sample': 1710, 'do_validation': True}, 'epoch': [0, 1, 2, 3, 4], 'history': {'loss': [0.96936064512408959, 0.66933631673890948, 0.63404161288724303, 0.62268789783555867, 0.60833334699708819], 'val_loss': [0.84040999412536621, 0.75676006078720093, 0.73714292049407959, 0.71032363176345825, 0.71341043710708618]}} 

Оказывается, нет никакого списка, как val_acc в моей истории словаря.

Вопрос: Как включить val_acc в словарь history?

ответ

2

Объект истории создается во время fit() ting модели. См. keras/engine/training.py.

Вы можете получить доступ к истории, используя атрибут history по модели: model.history.

После установки модели вы просто усредняете по атрибуту.

np.mean([v['val_acc'] for v in model.history]) 

Обратите внимание, что шаблон равен val_<your output name here> для каждого заданного вами вывода.

+0

Спасибо за ответ @nemo, вы можете взгляните на мое недавнее редактирование? – akilat90

2

Зачем вы находите: средний точность важна, чем конечная точность? В зависимости от ваших начальных значений, ваш средний показатель может быть довольно обманчивым. Легко придумать разные кривые, которые имеют одинаковые средние, но разные интерпретации.

Я только что составил всю историю train_acc и val_acc, чтобы решить, хорошо ли работает RNN в рамках данной настройки. А также не забывайте иметь размер выборки N> 1. Случайная инициализация может оказать большое влияние на RNN, принять по крайней мере N = 10 различных инициализаций для каждой установки, чтобы убедиться, что разная производительность на самом деле вызвана вашим заданным размером а не улучшением/худшими инициализациями.

+1

спасибо, что заставило меня задуматься. Да, я был неправ и просто игнорировал тот факт, что сеть становится лучше в каждую эпоху. В этом смысле, как вы сказали, получить окончательный 'val_acc 'будет достаточно. – akilat90

3

Для получения значений точности необходимо запросить, чтобы они были рассчитаны в течение fit, поскольку точность не является объективной функцией, а является (общей) метрикой. Иногда расчет точности не имеет смысла, поэтому он не включен по умолчанию в Keras. Тем не менее, это встроенная метрика и ее легко добавить.

Чтобы добавить метрику, используемый metrics=['accuracy'] параметр model.fit:

В вашем примере:

history = model.fit(X_train, y_train, batch_size = 512, 
      nb_epoch = 5, validation_split = 0.05, metrics=['accuracy']) 

Вы можете получить доступ к точности проверки, как history.history['val_acc']

Смежные вопросы