Точность в модели CNN никогда не бывает высокой для обучения и проверки набора - PullRequest
0 голосов
/ 28 декабря 2018

Я обучаю модель CNN для набора данных KTH , чтобы обнаружить 6 классов человеческих действий.

Обработка данных

  • Набор данных состоит из 599 видео, каждоеВ акции 99-100 видеороликов в исполнении 25 разных людей.Я разделил данные на 300 видео для поезда, 98 видео для проверки и 200 видео для тестового набора.
  • Я уменьшил разрешение до 50x50 пикселей, поэтому при обработке не хватает памяти.
  • Я извлек 200 кадров из середины каждого видео.
  • он нормализовал пиксели от 0-255 до 0,1 .
  • Наконец, я горячо закодировал метки классов.

Архитектура модели

Это моя модель архитектуры .
И это код NN слоев.

model = Sequential()
model.add(Conv3D(filters=64,
         kernel_size=(3, 3, 3),
         strides=(1, 1, 1),
         padding='valid',
         activation='relu', 
         input_shape=X_train.shape[1:]))

model.add(MaxPooling3D(pool_size=2,
               strides=(2, 2, 2),
               padding='same'))

model.add(Conv3D(filters=128,
         kernel_size=(3, 3, 3),
         strides=(1, 1, 1),
         padding='valid',
         activation='relu'))

model.add(MaxPooling3D(pool_size=2,
               strides=(2, 2, 2),
               padding='same'))

model.add(Conv3D(filters=256,
         kernel_size=(3, 3, 3),
         strides=(1, 1, 1),
         padding='valid', 
         activation='relu'))

model.add(Conv3D(filters=256,
         kernel_size=(3, 3, 3),
         strides=(1, 1, 1),
         padding='valid',
         activation='relu'))

model.add(MaxPooling3D(pool_size=2,
               strides=(2, 2, 2),
               padding='same'))

model.add(Conv3D(filters=512,
         kernel_size=(3, 3, 3),
         strides=(1, 1, 1),
         padding='valid',
         activation='relu'))

model.add(Dense(4096, activation='relu'))
model.add(Dense(4096, activation='relu'))
#model.add(Dropout(0.5))
model.add(Flatten())
model.add(Dense(6, activation='softmax'))

model.summary()

Тренировка

Моя проблема в том, что как тренировка, так и точность проверки не меняются, и они в основном застыли с первой эпохи.Это тренировочный шаг.Это первые 6 эпох , а здесь последние 6 эпох .Потеря выглядит вот так .Потеря обучения очень высока, и потеря для проверки не меняется.и тренировка выглядит вот так .

Я в замешательстве, модель соответствует или соответствует ?Как я собираюсь решить эту проблему?Поможет ли dropout , так как я не могу сделать увеличение данных на видео (я предполагал, что)?

Я очень ценю любое предложение.

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Вы используете 0-1 значения фреймов и используете relu.В умирающей модели задачи relu заморожена и не обучается вообще, потому что relu получает максимальные значения b / w 0 или ввод веса *, если смещение не добавлено.Вы можете сделать 2 вещи, чтобы убедиться, что модель работает должным образом, хотя я не уверен, получите ли вы хорошую точность или нет, но могу попробовать это, чтобы избежать этой проблемы с умирающим реулом: -

Использовать негерметичный реул с альфа> =0.2.Не нормализуйте кадры, вместо этого просто преобразуйте их в оттенки серого, чтобы уменьшить интенсивность обучения.Не берите 200 кадров из середины, разделите все видео на равное количество фрагментов кадра и берите 2,3 последовательных кадра из каждого фрагмента.также попробуйте добавить более плотные слои, так как они помогают в классификации.

Я работал почти над той же проблемой, и я использовал Conv2d после объединения кадров, т.е. если у вас есть 10 кадров размером 64,64,3 каждыйвместо того, чтобы делать conv3d, я сделал conv2d для набора данных 640,64,3 и привел к 86% точности в 16 классах для видео.

0 голосов
/ 28 декабря 2018

Это зависит от того, как вы используете 200 кадров видео в качестве обучающих данных для классификации действий.В ваших данных о тренировках слишком много смещений.Поскольку это последовательные данные, которые необходимо классифицировать, вы должны использовать архитектуру на основе памяти или модель конкатенации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...