Я трохи граю з конвенцями. Зокрема, я використовую набір даних кангл-котів проти собак, який складається з 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 зображень.
Крім того, я нормалізую зображення, використовуючи min max нормалізацію, де X - зображення
Код написаний в тензорфлоу, а розмір партії - 128.
Міні-партії даних про навчання закінчуються надмірними та мають точність 100%, тоді як дані перевірки, схоже, перестають навчатися на рівні близько 84-85%.
Я також намагався збільшити / зменшити рівень випадання.
Оптимізатором, який використовується, є AdamOptimizer зі ступенем навчання 0,0001
На даний момент я граю з цією проблемою останні 3 тижні, і 85%, здається, поставили перед собою бар'єр.
Для запису я знаю, що можу використовувати трансферне навчання для досягнення набагато вищих результатів, але мені цікаво будувати цю мережу як досвід самонавчання.
Оновлення:
Я запускаю мережу SAME з іншим розміром партії, в цьому випадку я використовую значно менший розмір партії (16 замість 128), поки я досягаю точності 87,5% (замість 85%). Однак це означає, що мережа все одно закінчується надмірно придатною. Досі я не розумію, як випадання 50% одиниць не допомагає ... очевидно, я тут щось неправильно роблю. Будь-які ідеї?
Оновлення 2:
Схоже, проблема пов’язана з розміром партії, як і з меншим розміром (16 замість 128), я досягаю зараз 92,8% точності на моєму тестовому наборі, менший розмір партії все ще переповнюється (міні-партії закінчуються з точністю 100%), однак втрати (похибка) постійно зменшуються, і вони в цілому є більш стабільними. Мінуси - набагато повільніший час роботи, але це цілком варто чекати.