Я немного играю с конвеетами. В частности, я использую набор данных kaggle cats-vs-dogs, который состоит из 25000 изображений, помеченных как кошки или собаки (по 12500 изображений).
Мне удалось достичь около 85% точности классификации на моем тестовом наборе, однако я поставил цель добиться точности 90%.
Моя главная проблема - переоснащение. Каким-то образом это всегда происходит (обычно после 8-10 эпох). Архитектура моей сети слабо вдохновлена VGG-16, более конкретно, мои изображения изменены до , а затем я запускаю:
Convolution 1 128x128x32 (kernel size is 3, strides is 1)
Convolution 2 128x128x32 (kernel size is 3, strides is 1)
Max pool 1 64x64x32 (kernel size is 2, strides is 2)
Convolution 3 64x64x64 (kernel size is 3, strides is 1)
Convolution 4 64x64x64 (kernel size is 3, strides is 1)
Max pool 2 32x32x64 (kernel size is 2, strides is 2)
Convolution 5 16x16x128 (kernel size is 3, strides is 1)
Convolution 6 16x16x128 (kernel size is 3, strides is 1)
Max pool 3 8x8x128 (kernel size is 2, strides is 2)
Convolution 7 8x8x256 (kernel size is 3, strides is 1)
Max pool 4 4x4x256 (kernel size is 2, strides is 2)
Convolution 8 4x4x512 (kernel size is 3, strides is 1)
Fully connected layer 1024 (dropout 0.5)
Fully connected layer 1024 (dropout 0.5)
Все слои, кроме последнего, имеют реус как функции активации.
Обратите внимание, что я пробовал разные комбинации сверток (я начал с более простых сверток).
Кроме того, я дополнил набор данных зеркальным отображением изображений, так что в общей сложности у меня есть 50000 изображений.
Кроме того, я нормализую изображения, используя минимальную максимальную нормализацию, где X - изображение
Код написан в тензорном потоке, а размер пакета равен 128.
Мини-партии обучающих данных заканчивают переобучением и имеют точность 100%, в то время как данные проверки, кажется, перестают учиться на уровне 84-85%.
Я также пытался увеличить / уменьшить коэффициент отсева.
Используемым оптимизатором является AdamOptimizer со скоростью обучения 0,0001.
В настоящее время я играю с этой проблемой последние 3 недели, и 85%, кажется, поставили передо мной барьер.
Кстати, я знаю, что могу использовать трансферное обучение для достижения гораздо более высоких результатов, но мне интересно создавать эту сеть как самообучающийся опыт.
Обновить:
Я использую ту же самую сеть с другим размером пакета, в этом случае я использую пакет намного меньшего размера (16 вместо 128), пока я достигаю точности 87,5% (вместо 85%). Тем не менее, сеть в конечном итоге перегружается. Тем не менее, я не понимаю, как отсев 50% единиц не помогает ... очевидно, я делаю что-то здесь не так. Есть идеи?
Обновление 2:
Похоже, что проблема была связана с размером пакета, так как с меньшим размером (16 вместо 128) я достигаю точности 92,8% на моем тестовом наборе, с меньшим размером пакета сеть все еще перегружается (мини-пакеты заканчиваются с точностью до 100%) однако потери (погрешности) продолжают уменьшаться и в целом более стабильны. Минусы - НАМНОГО более медленное время работы, но оно того стоит.