Точность валидации почти нулевая, в то время как точность обучения значительно выше.

Вопрос или проблема

Я обучаю большой набор данных с использованием CNN. Обучающий набор данных включает 46182 образца и 1414 различных классов, в то время как валидационный набор данных содержит 14053 образца и 790 различных классов.
Первый вопрос касается разницы в количестве классов между наборами данных (обучающим и валидационным). Программа не выдает ошибку, но я спрашиваю, могут ли они иметь разное количество классов.
Второй вопрос касается точности валидации. Она почти нулевая. Почему? Что не так с моим набором данных? Я добавлю любые дополнительные детали, которые вам могут понадобиться для ответа на этот вопрос.
Спасибо всем

  Используемое устройство: cuda
ConvNet(
  (features): Sequential(
    (0): Conv2d(3, 64, kernel_size=(11, 11), stride=(2, 2), padding=(2, 2))
    (1): ReLU()
    (2): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)
    (3): Conv2d(64, 192, kernel_size=(5, 5), stride=(1, 1), padding=(1, 1))
    (4): ReLU()
    (5): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)
    (6): Conv2d(192, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (7): ReLU()
    (8): Conv2d(384, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (9): ReLU()
    (10): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (11): ReLU()
    (12): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)
  )
  (avgpool): AdaptiveAvgPool2d(output_size=(6, 6))
  (classifier): Sequential(
    (0): Dropout(p=0.5, inplace=False)
    (1): Linear(in_features=9216, out_features=4096, bias=True)
    (2): ReLU()
    (3): Dropout(p=0.5, inplace=False)
    (4): Linear(in_features=4096, out_features=4096, bias=True)
    (5): ReLU()
    (6): Linear(in_features=4096, out_features=1414, bias=True)
  )
)

Epoch [1/10], Step [100/1444], Loss: 4.3480
Epoch [1/10], Step [200/1444], Loss: 2.9175
Epoch [1/10], Step [300/1444], Loss: 2.9079
Epoch [1/10], Step [400/1444], Loss: 3.1212
Epoch [1/10], Step [500/1444], Loss: 3.0263
Epoch [1/10], Step [600/1444], Loss: 1.8653
Epoch [1/10], Step [700/1444], Loss: 3.2399
Epoch [1/10], Step [800/1444], Loss: 2.6928
Epoch [1/10], Step [900/1444], Loss: 3.0468
Epoch [1/10], Step [1000/1444], Loss: 3.9601
Epoch [1/10], Step [1100/1444], Loss: 3.0152
Epoch [1/10], Step [1200/1444], Loss: 2.3946
Epoch [1/10], Step [1300/1444], Loss: 2.4321
Epoch [1/10], Step [1400/1444], Loss: 2.2768
Training accuracy is: 47.609458230479405 %
Validation accuracy is: 0.01423183661851562 %
Epoch [2/10], Step [100/1444], Loss: 2.3812
Epoch [2/10], Step [200/1444], Loss: 3.6333
Epoch [2/10], Step [300/1444], Loss: 1.5989
Epoch [2/10], Step [400/1444], Loss: 2.0270
Epoch [2/10], Step [500/1444], Loss: 2.0203
Epoch [2/10], Step [600/1444], Loss: 1.7256
Epoch [2/10], Step [700/1444], Loss: 2.1529
Epoch [2/10], Step [800/1444], Loss: 1.8853
Epoch [2/10], Step [900/1444], Loss: 1.7869
Epoch [2/10], Step [1000/1444], Loss: 2.4056
Epoch [2/10], Step [1100/1444], Loss: 2.2948
Epoch [2/10], Step [1200/1444], Loss: 2.8236
Epoch [2/10], Step [1300/1444], Loss: 2.0853
Epoch [2/10], Step [1400/1444], Loss: 1.4059
Training accuracy is: 61.51097830323503 %
Validation accuracy is: 0.01423183661851562 %
Epoch [3/10], Step [100/1444], Loss: 1.5463
Epoch [3/10], Step [200/1444], Loss: 1.6350
Epoch [3/10], Step [300/1444], Loss: 1.5154
Epoch [3/10], Step [400/1444], Loss: 1.3911
Epoch [3/10], Step [500/1444], Loss: 2.3427
Epoch [3/10], Step [600/1444], Loss: 1.9637
Epoch [3/10], Step [700/1444], Loss: 2.2812
Epoch [3/10], Step [800/1444], Loss: 1.3364
Epoch [3/10], Step [900/1444], Loss: 1.6822
Epoch [3/10], Step [1000/1444], Loss: 1.4466
Epoch [3/10], Step [1100/1444], Loss: 2.2428
Epoch [3/10], Step [1200/1444], Loss: 1.6200
Epoch [3/10], Step [1300/1444], Loss: 1.0331
Epoch [3/10], Step [1400/1444], Loss: 1.2516
Training accuracy is: 64.0465982417392 %
Validation accuracy is: 0.01423183661851562 %
Epoch [4/10], Step [100/1444], Loss: 2.8520
Epoch [4/10], Step [200/1444], Loss: 1.6832
Epoch [4/10], Step [300/1444], Loss: 1.6646
Epoch [4/10], Step [400/1444], Loss: 1.5798
Epoch [4/10], Step [500/1444], Loss: 1.0860
Epoch [4/10], Step [600/1444], Loss: 1.6025
Epoch [4/10], Step [700/1444], Loss: 2.0202
Epoch [4/10], Step [800/1444], Loss: 2.2118
Epoch [4/10], Step [900/1444], Loss: 2.6608
Epoch [4/10], Step [1000/1444], Loss: 1.5132
Epoch [4/10], Step [1100/1444], Loss: 2.2968
Epoch [4/10], Step [1200/1444], Loss: 1.6361
Epoch [4/10], Step [1300/1444], Loss: 1.5535
Epoch [4/10], Step [1400/1444], Loss: 1.9294
Training accuracy is: 65.98891342947469 %
Validation accuracy is: 0.03557959154628905 %
Epoch [5/10], Step [100/1444], Loss: 2.3014
Epoch [5/10], Step [200/1444], Loss: 1.3139
Epoch [5/10], Step [300/1444], Loss: 2.4293
Epoch [5/10], Step [400/1444], Loss: 1.4564
Epoch [5/10], Step [500/1444], Loss: 1.5917
Epoch [5/10], Step [600/1444], Loss: 1.2819
Epoch [5/10], Step [700/1444], Loss: 1.7925
Epoch [5/10], Step [800/1444], Loss: 2.0991
Epoch [5/10], Step [900/1444], Loss: 1.6835
Epoch [5/10], Step [1000/1444], Loss: 1.4019
Epoch [5/10], Step [1100/1444], Loss: 2.3408
Epoch [5/10], Step [1200/1444], Loss: 1.6424
Epoch [5/10], Step [1300/1444], Loss: 1.7549
Epoch [5/10], Step [1400/1444], Loss: 2.1294
Training accuracy is: 67.10406651942316 %
Validation accuracy is: 0.01423183661851562 %
Epoch [6/10], Step [100/1444], Loss: 1.5786
Epoch [6/10], Step [200/1444], Loss: 1.9251
Epoch [6/10], Step [300/1444], Loss: 1.1821
Epoch [6/10], Step [400/1444], Loss: 1.7785
Epoch [6/10], Step [500/1444], Loss: 1.8077
Epoch [6/10], Step [600/1444], Loss: 1.8270
Epoch [6/10], Step [700/1444], Loss: 0.7196
Epoch [6/10], Step [800/1444], Loss: 1.3857
Epoch [6/10], Step [900/1444], Loss: 1.4348
Epoch [6/10], Step [1000/1444], Loss: 1.4984
Epoch [6/10], Step [1100/1444], Loss: 2.2927
Epoch [6/10], Step [1200/1444], Loss: 1.6183
Epoch [6/10], Step [1300/1444], Loss: 1.4204
Epoch [6/10], Step [1400/1444], Loss: 1.9037
Training accuracy is: 68.15858992681132 %
Validation accuracy is: 0.02846367323703124 %
Epoch [7/10], Step [100/1444], Loss: 2.4369
Epoch [7/10], Step [200/1444], Loss: 1.4145
Epoch [7/10], Step [300/1444], Loss: 2.3228
Epoch [7/10], Step [400/1444], Loss: 1.0643
Epoch [7/10], Step [500/1444], Loss: 1.6115
Epoch [7/10], Step [600/1444], Loss: 1.7311
Epoch [7/10], Step [700/1444], Loss: 1.8682
Epoch [7/10], Step [800/1444], Loss: 1.9544
Epoch [7/10], Step [900/1444], Loss: 1.3249
Epoch [7/10], Step [1000/1444], Loss: 1.5936
Epoch [7/10], Step [1100/1444], Loss: 1.8037
Epoch [7/10], Step [1200/1444], Loss: 0.9030
Epoch [7/10], Step [1300/1444], Loss: 0.9519
Epoch [7/10], Step [1400/1444], Loss: 2.1336
Training accuracy is: 69.43614395218917 %
Validation accuracy is: 0.03557959154628905 %
Epoch [8/10], Step [100/1444], Loss: 2.6581
Epoch [8/10], Step [200/1444], Loss: 1.9336
Epoch [8/10], Step [300/1444], Loss: 1.8492
Epoch [8/10], Step [400/1444], Loss: 1.5723
Epoch [8/10], Step [500/1444], Loss: 1.4108
Epoch [8/10], Step [600/1444], Loss: 1.3323
Epoch [8/10], Step [700/1444], Loss: 1.1944
Epoch [8/10], Step [800/1444], Loss: 1.4232
Epoch [8/10], Step [900/1444], Loss: 1.7826
Epoch [8/10], Step [1000/1444], Loss: 2.1287
Epoch [8/10], Step [1100/1444], Loss: 2.4027
Epoch [8/10], Step [1200/1444], Loss: 1.3423
Epoch [8/10], Step [1300/1444], Loss: 0.7948
Epoch [8/10], Step [1400/1444], Loss: 1.5933
Training accuracy is: 70.04677146940367 %
Validation accuracy is: 0.021347754927773428 %
Epoch [9/10], Step [100/1444], Loss: 1.2857
Epoch [9/10], Step [200/1444], Loss: 0.9126
Epoch [9/10], Step [300/1444], Loss: 1.9613
Epoch [9/10], Step [400/1444], Loss: 1.1776
Epoch [9/10], Step [500/1444], Loss: 0.9943
Epoch [9/10], Step [600/1444], Loss: 1.0764
Epoch [9/10], Step [700/1444], Loss: 1.9013
Epoch [9/10], Step [800/1444], Loss: 1.6114
Epoch [9/10], Step [900/1444], Loss: 1.4612
Epoch [9/10], Step [1000/1444], Loss: 1.4244
Epoch [9/10], Step [1100/1444], Loss: 1.8325
Epoch [9/10], Step [1200/1444], Loss: 1.5229
Epoch [9/10], Step [1300/1444], Loss: 1.2167
Epoch [9/10], Step [1400/1444], Loss: 1.9158
Training accuracy is: 70.64873760339526 %
Validation accuracy is: 0.02846367323703124 %
Epoch [10/10], Step [100/1444], Loss: 1.8997
Epoch [10/10], Step [200/1444], Loss: 1.0037
Epoch [10/10], Step [300/1444], Loss: 1.7071
Epoch [10/10], Step [400/1444], Loss: 1.0976
Epoch [10/10], Step [500/1444], Loss: 1.6068
Epoch [10/10], Step [600/1444], Loss: 1.5771
Epoch [10/10], Step [700/1444], Loss: 1.0570
Epoch [10/10], Step [800/1444], Loss: 0.7969
Epoch [10/10], Step [900/1444], Loss: 2.2452
Epoch [10/10], Step [1000/1444], Loss: 1.0465
Epoch [10/10], Step [1100/1444], Loss: 1.3647
Epoch [10/10], Step [1200/1444], Loss: 1.2038
Epoch [10/10], Step [1300/1444], Loss: 0.9818
Epoch [10/10], Step [1400/1444], Loss: 1.5678
Training accuracy is: 71.37845913992464 %
Validation accuracy is: 0.04981142816480467 %

Для точного ответа могут потребоваться дополнительные данные.

  • Все ли классы валидации присутствуют в обучающем наборе?
  • Пробовали ли вы перераспределить наборы данных (обучение vs валидация)?

Кажется, ваша модель слишком сильно переобучается. К тому же, ваша ошибка не уменьшается существенно с течением обучения; это ошибка на обучении, валидации или общая ошибка?

Возможно, число образцов на класс слишком мало (30 для обучения и 20 для валидации). Посмотрите эту статью для получения дополнительных сведений.

Редактирование:

С вашими ответами я могу сказать, что присутствует внутренняя проблема формулировки. Нельзя ожидать от модели, что она предскажет классы, которые она не видела ранее. Я бы рекомендовал вам более глубоко проанализировать результаты, например, по классам или ошибкам. Затем попробуйте перераспределить данные (объединить и разделить), чтобы все классы присутствовали в обучающем наборе.

.

Ответ или решение

Ваша проблема связана с резким расхождением между точностью на обучающей и валидационной выборках при обучении сверточной нейронной сети (CNN). Давайте детально разберем возможные причины и решения этой проблемы, используя подход TEA (Theory, Example, Application):

Теория (Theory):

  1. Различие в классах: Одной из проблем может быть различие в количестве классов между обучающей и валидационной выборками. Важно, чтобы валидационная выборка происхила из того же распределения классов, что и обучающая. Если валидационная выборка включает классы, которые отсутствуют в обучающей, это неизбежно приведет к очень низкой валидационной точности, поскольку модель просто не видела эти классы ранее.

  2. Недостаточная объемность данных на класс: У вас на класс примерно 30 образцов в обучающей выборке и 20 — во валидационной. Это может быть недостаточным для устойчивого обучения модели, особенно при большом количестве классов (1414) и, тем более, если сеть достаточно глубокая. Это приводит к переобучению, поскольку модель адаптируется к специфическим обучающим данным, теряя обобщающую способность.

  3. Проблема переобучения (overfitting): Ваша модель демонстрирует типичные признаки переобучения, когда модель хорошо предсказывает на обучающих данных, но плохо — на новых данных (валидационных).

  4. Отсутствие сбора данных по всем классам: Если некоторые классы полностью отсутствуют в данных, модель будет испытывать трудности с предсказаниями по этим классам.

Пример (Example):

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

Применение (Application):

  1. Переразметка данных: Убедитесь, что все классы валидационной выборки есть в обучающей. Включение каждого из 790 классов в валидационную выборку, которые были представлены и в обучающей — гарантия справедливого тестирования модели.

  2. Уравнивание классов: Подсчитайте количество образцов в каждом классе. Если некоторые классы обладают слишком малым объемом данных, стоит их дополнительно увеличивать методом аугментации (например, вращением, зеркальным отображением).

  3. Сложность архитектуры: Рассмотрите возможность адаптации существующей архитектуры. Снижение сложности модели может помочь уменьшить переобучение. Уменьшите количество слоев или размер слоев, если это приемлемо для вашей задачи.

  4. Использование регуляризации: Применение механизмов регуляризации (например, dropout, L2-регуляризация) поможет уменьшить переобучение, сохраняя модель более гибкой к новым данным.

  5. Ресемплирование данных: Попробуйте переразбить данные, убедившись, что каждая выборка (обучающая и валидационная) сохраняет представительство всех классов.

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

  7. Анализ ошибок: Регулярно анализируйте ошибки модели, чтобы понять, на каких классах она ошибается чаще всего, и для этих классов проведите дополнительные исследования и коррекцию подходов.

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

Оцените материал
Добавить комментарий

Капча загружается...