Правильный способ получения производительности перекрестной проверки нейронной сети - PullRequest
0 голосов
/ 19 марта 2020

Я сталкивался с несколькими постами ( здесь и здесь ), в которых упоминается, что выполнение перекрестной проверки (CV) в k-кратном порядке с нейронными сетями (NN) аналогично CV с алгоритмы машинного обучения (SVM, случайный лес и др. c.). Основная идея c состоит в том, чтобы разделить базу данных на k равных разбиений, обучить модель на k-1 разбиениях и проверить производительность на k-м разбиении, выполнить итерацию для всех разбиений.

Но, рассмотрим проблема классификации, где мне нужно получить матрицу CV путаницы.

Очевидно, что при обучении NN мы должны наблюдать потерю проверки и убедиться, что сеть не перегружена. Поэтому обучение модели для фиксированного числа эпох на каждом этапе CV без учета потери проверки не рекомендуется, несмотря на то, что кодировано в machinelearningmastery .

Если мы используем k th Разделив данные проверки, как показано в следующем фрагменте, эпоха с наименьшими потерями проверки будет сохранена как лучшая модель.

for train, test in kfold.split(X, Y):

    model = build_model()
    opt = Adam(lr=0.00005)
    model.compile(loss = "categorical_crossentropy", optimizer = opt, metrics=['accuracy'])

    filepath='saved_models/best_model.h5'
    checkpointer = ModelCheckpoint(filepath=filepath, verbose=1, save_best_only=True)

    model.fit([X[train], Y[train], 
          validation_data=([X[test]],Y[test]), epochs=50, batch_size=40, callbacks=[checkpointer])

Теперь,

  1. Насколько рационально использовать сохраненную наилучшую модель для оценки тех же данных проверки следующим образом?

    best_model = load_model('saved_models/best_model.h5')
    scores = best_model.evaluate([X[test], Y[test], verbose=0)
    accuracy = scores[1]*100  # classification accuracy of kth split
    
  2. Если у нас есть наборы для обучения, проверки и тестирования отдельно, как описано в этом SO ответе. Но это противоречит определению k-кратного CV, потому что мы не тренируемся на k-1 сплитах.

  3. Или мы должны тренироваться для фиксированного числа эпох без рассмотрения проверки, и проверить производительность на тестовом наборе, как в machinelearningmastery ?

...