Потеря проверки >> потеря поезда, те же данные, двоичный классификатор - PullRequest
0 голосов
/ 22 мая 2019

Я реализовал нейронную сеть этой статьи, с некоторыми отличиями (ниже), для классификации ЭЭГ; train_on_batch производительность отличная, с очень низкими потерями - но test_on_batch производительность, хотя для тех же данных , плохая: сеть, кажется, всегда предсказывает '1', большую часть времени:

       TRAIN (loss,acc)   VAL (loss,acc)
'0' -- (0.06269842,1)     (3.7652588,0)
'1' -- (0.04473557,1)     (0.3251827,1)

Данные подаются в виде 30-секундных сегментов (12000 временных шагов) (10 минут на набор данных) из 32 (= batch_size) наборов данных одновременно (img ниже)

Любое средство?


Попытка устранения неисправности :
  1. Отключение отсева
  2. Отключение всех регуляризаторов (кроме пакетной нормы)
  3. Случайно, val_acc ('0', '1') = (~ .90, ~ .12) - затем обратно к (0,1)

Дополнительные сведения :

  • Keras 2.2.4 (бэкэнд TensorFlow), Python 3.6, Spyder 3.3.4 через Anaconda
  • CuDNN LSTM с состоянием
  • CNNs предварительно подготовлены, LSTM добавлены впоследствии (и оба обучены)
  • BatchNormalization после каждого слоя CNN & LSTM
  • reset_states() применяется между различными наборами данных
  • squeeze_excite_block вставляется после каждого, кроме последнего блока CNN


UPDATE : Прогресс был достигнут; batch_normalization и dropout являются главными виновниками. Основные изменения:
  • Удалены блоки LSTM, GaussianNoise, SqueezeExcite (ниже)
  • Реализовано batch_norm патч
  • Добавлено sample_weights для отражения дисбаланса класса - варьируется от 0,75 до 2.
  • Обучен различным схемам разминки для выпадений MaxPool и Input

Наблюдалось значительное улучшение, но не почти полное. Поведение по сравнению с потерей в валидации действительно странно - переключение предсказаний классов и бомбардировка тех же самых наборов данных, которые он только что обучил :

image

Кроме того, BatchNormalization выходы во время тренировки и тестирования значительно различаются (рис. Ниже)


ОБНОВЛЕНИЕ 2: Все другие подозрения были исключены: Нормализация партии является виновником. Использование самонормализующихся сетей (SNN) с SELU и AlphaDropout вместо BatchNormalization дает стабильные и согласованные результаты.
image image image image image

1 Ответ

0 голосов
/ 07 июля 2019

Я случайно остался в одном нестандартизированном образце (в партии 32) с sigma=52 - что серьезно нарушило слои BN;после стандартизации я больше не наблюдаю сильного несоответствия между режимами поезда и логического вывода - во всяком случае, трудно различить какие-либо различия.

Кроме того, вся предварительная обработка была очень ошибочной - после правильного повторного выполнения проблема больше не возникаларецидивирует.В качестве подсказки отладки попробуйте определить, сильно ли какой-либо конкретный набор данных поезда активирует слои во время вывода.

...