Вопрос или проблема
Я обучил свою модель CNN на CIFAR 10 и получил val_accuracy 87%, что не является низким значением, но когда дело доходит до распознавания изображений, моя модель неправильно определила большинство изображений. Кто-нибудь знает, почему это происходит и как решить эту проблему?
Вот как я исправил несоответствие классов, код написан с использованием Pytorch, большинство функций являются кастомными, но я написал эквивалентные в комментариях:
def main():
modelPath="../Results/BestModel/model.ntw"
model = Om.openModel(modelPath) # torch.load(modelPath)
dataPath="food-101/images" # Путь к набору данных
listClasses = os.listdir(dataPath) # Список классов, здесь каждая папка в dataPath - это класс
dicClasses = {}
for i, imClass in enumerate(listClasses):
if i % 5 == 0:
print(str(i) + "https://datascience.stackexchange.com/" + str(len(listClasses)))
res = []
lIm = os.listdir(os.path.join(dataPath, imClass))
random.shuffle(lIm)
for imName in lIm[:20]: # Берем 20 изображений каждого класса
im = Om.loadImage(os.path.join(dataPath, imClass, imName)) # Загрузка изображения с применением правильных преобразований
res.append(model(im).cpu().numpy()) # Сохраняем результат предсказания
resmed = np.mean(res, 0)[0] # Суммируем все предсказания
r = indexesMax(resmed, 1) # функция аналогична torch.argmax(resmed).
dicClasses[imClass] = r
print(dicClasses)
Ответ или решение
При попытке достичь высокой точности модели нейронной сети, такой как свёрточная нейронная сеть (CNN) для задачи классификации изображений, важно учитывать множество факторов, которые могут влиять на качество предсказаний. В ситуации, когда ваша модель обучена на датасете CIFAR-10 и достигла 87% точности на валидационном наборе данных, но удовлетворительно не справляется с классификацией изображений, возникают несколько вероятных причин и способов их решения.
Возможные причины проблемы:
-
Классический оверфиттинг:
- Описание: Модель выучила детали и шумы обучающего набора данных, которые не имеют значения для новой, невиданной информации.
- Решение: Рассмотрите использование методов регуляризации, таких как Dropout, и добавьте больше обучающих данных для улучшения обобщающей способности модели.
-
Несоответствие классов:
- Описание: В коде наблюдаются поправки на несоответствие классов. Если классы в обучающем наборе данных не соответствуют меткам, используемым при тестировании модели, это приведёт к ошибкам классификации.
- Решение: Убедитесь, что имена и структура классов в наборе данных строго соответствуют тем, которые модель ожидает на входе. Вы также можете использовать словарь соответствий классов, как это реализовано в вашем коде.
-
Проблемы с предварительной обработкой данных:
- Описание: Неправильная предварительная обработка изображений может повлиять на производительность модели.
- Решение: Проверьте, что все изображения проходят одну и ту же последовательность трансформаций, необходимых для стандартизации входных данных, включая изменение размера, нормализацию, и любую другую аугментацию.
-
Неправильная архитектура модели:
- Описание: Текущая архитектура модели может быть не оптимальной для задачи.
- Решение: Рассмотрите возможность экспериментов с различными архитектурами CNN, как например ResNet или EfficientNet, которые могут обеспечить более высокую производительность.
-
Оценка через публичные функции:
- Описание и решение: Использование библиотек, таких как PyTorch, предполагает приведение всех ваших собственных функций в соответствие с хорошо зарекомендовавшими себя публичными функциями (например,
torch.argmax
вместо пользовательских аналогов) для минимизации ошибок и улучшения репликабельности процесса.
- Описание и решение: Использование библиотек, таких как PyTorch, предполагает приведение всех ваших собственных функций в соответствие с хорошо зарекомендовавшими себя публичными функциями (например,
Заключение
Устранение вышеуказанных проблем может помочь повысить точность вашей модели CNN и, главное, улучшить качество её предсказаний на новых данных. Сперва ориентируйтесь на ключевые аспекты, такие как корректные данные, соответствующие метке классы и правильная архитектура модели. Профессиональный подход к диагностике и исправлению проблем с обучением моделей может существенно улучшить их производительность и сделать предсказания более надёжными.