Переобладнання конвертної нейронної мережі. Випадання не допомагає


16

Я трохи граю з конвенцями. Зокрема, я використовую набір даних кангл-котів проти собак, який складається з 25000 зображень, позначених як кішка або собака (12500 у кожному).

Мені вдалося досягти близько 85% точності класифікації на моєму тестовому наборі, проте я поставив мету досягти 90% точності.

Моя головна проблема - це надмірне обладнання. Так чи інакше це завжди відбувається (як правило, після епохи 8-10). Архітектура моєї мережі дуже натхненна VGG-16, точніше, мої зображення змінюються на розмір , а потім я запускаю:128x128x3

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 - зображення

X=X0/2550

Код написаний в тензорфлоу, а розмір партії - 128.

Міні-партії даних про навчання закінчуються надмірними та мають точність 100%, тоді як дані перевірки, схоже, перестають навчатися на рівні близько 84-85%.

Я також намагався збільшити / зменшити рівень випадання.

Оптимізатором, який використовується, є AdamOptimizer зі ступенем навчання 0,0001

На даний момент я граю з цією проблемою останні 3 тижні, і 85%, здається, поставили перед собою бар'єр.

Для запису я знаю, що можу використовувати трансферне навчання для досягнення набагато вищих результатів, але мені цікаво будувати цю мережу як досвід самонавчання.

Оновлення:

Я запускаю мережу SAME з іншим розміром партії, в цьому випадку я використовую значно менший розмір партії (16 замість 128), поки я досягаю точності 87,5% (замість 85%). Однак це означає, що мережа все одно закінчується надмірно придатною. Досі я не розумію, як випадання 50% одиниць не допомагає ... очевидно, я тут щось неправильно роблю. Будь-які ідеї?

Оновлення 2:

Схоже, проблема пов’язана з розміром партії, як і з меншим розміром (16 замість 128), я досягаю зараз 92,8% точності на моєму тестовому наборі, менший розмір партії все ще переповнюється (міні-партії закінчуються з точністю 100%), однак втрати (похибка) постійно зменшуються, і вони в цілому є більш стабільними. Мінуси - набагато повільніший час роботи, але це цілком варто чекати.


2
Чи можете ви дати детальнішу інформацію щодо вашої оцінки перевиконання? Наприклад, чи знижується точність перевірки в будь-якій точці, поряд із розбіжністю від результатів навчання та перевірки? Як щодо функції втрат?
Ніл Слейтер

Хороший запитання, тому, переосмислюючи, я маю на увазі той факт, що міні-партії в поїзді досягають точності 100% та втрат 0,08, тоді як перевірка, здається, ніколи не перевищує 0,35, а її точність залишається на сьогодні 88%. Згідно з валідацією вона, здається, не падає (принаймні, не надто багато), здається, стає плоскою, однак як же міні-партії досягти таких низьких втрат, поки перевірка ще далека від неї?
Хуан Антоніо Гомес Моріано

Я не знаю відповіді для вас, однак ця поведінка - велика розбіжність між поїздом і валідацією, але все-таки добре підтверджена валідація - це те, що я бачив раніше кілька разів. Я майже не вагаюся, називаючи це надто придатним, тому що іноді результати тесту є прийнятними.
Ніл Слейтер

"Досі я не розумію, як випадання 50% одиниць не допомагає" Я бачив людей, які успішно використовують багато вищих значень випадання.
Рікардо Крус

Відповіді:


14

Гаразд, тому після багатьох експериментів мені вдалося отримати деякі результати / уявлення.

По-перше, при рівності, менші партії в навчальному наборі дуже допомагають для підвищення загальної продуктивності мережі, оскільки негативна сторона тренувального процесу стає набагато повільнішою.

По-друге, дані важливі, тут нічого нового, але, як я дізнався, боровся з цією проблемою, більше даних, здається, завжди трохи допомагає.

Третя точка, випадання корисно у великих мережах з великою кількістю даних та великою кількістю ітерацій, у моїй мережі я застосував відсідання лише на остаточних повністю з’єднаних шарах, шари згортання не застосували відсіву.

Четвертий пункт (і це те, що я вивчаю знову і знову): нейронні мережі беруть ЛОТ для тренувань навіть на хороших графічних процесорах (я тренував цю мережу на floydhub, який використовує досить дорогі карти NVIDIA), тому ПАТІЕНЦІЯ є ключовою .

Остаточний висновок: розміри партії важливіші, ніж можна подумати, мабуть, легше досягти локального мінімуму, коли партії більше.

Код, який я написав, доступний як блокнот пітона, я думаю, що це гідно задокументовано

https://github.com/moriano/loco-learning/blob/master/cats-vs-dogs/cats-vs-dogs.ipynb


Дякуємо, що опублікували свої висновки. Швидкий питання: Я зіткнувся з аналогічною проблемою , і я бачив це в записній книжці ви публікуються: NOTE USE EITHER mean centering or min-max, NOT BOTH. Наразі я ділю свої вхідні зображення на 255 всередині мого input_fn(API Tensorflow Estimator). Потім, всередині моделі, я запускаю цей вхід через пакетну норму. Чи варто все-таки робити лише одну з цих нормалізацій? Дивіться github.com/formigone/tf-imagenet/blob/master/models/…
rodrigo-silveira

Я розумію, що ділення на 255 здійснюється лише один раз на кожне зображення, і причина полягає в тому, щоб зберегти всі значення між 0 і 1, оскільки це забезпечить числову стабільність.
Хуан Антоніо Гомес Моріано

Звичайно, я це розумію. Але чи вважаєте ви, що має сенс також партія нормалізувати ці значення в діапазоні [0, 1]?
rodrigo-silveira

Це, я не знаю,
минув

3

Я пропоную вам проаналізувати графіки навчання вашої точності перевірки, як запропонував Ніл Слейтер. Потім, якщо точність перевірки падає, спробуйте зменшити розмір вашої мережі (здається занадто глибокою), додайте відмінність до шарів CONV та BatchNormalization після кожного шару. Це може допомогти позбутися від надягання та підвищити точність тесту.


Дякую за пораду, спробуй, але я був вражений, що шари CONV не потребують випадання, на більшості прочитаних нами праць випадає, здається, застосовується завжди до кінців повністю з’єднаних шарів, а не до конвультинів.
Хуан Антоніо Гомес Моріано

3

Існує кілька можливих рішень для вашої проблеми.

  1. Використовуйте випадання в попередніх шарах (згорткові шари) теж.

  2. Ваша мережа здається якось досить великою для такого "легкого" завдання; спробуйте зменшити його. Великі архітектури також навчаються на значно більших наборах даних.

Якщо ви хочете зберегти свою "велику" архітектуру, спробуйте:

  1. Збільшення зображення для того, щоб практично збільшити дані про навчання

  2. Спробуйте змагальний тренінг. Іноді це допомагає.


"Ваша мережа здається досить великою для такого" легкого "завдання; спробуйте зменшити її. Великі архітектури також навчаються на значно більших наборах даних". Я не згоден, оскільки я додав більше згортків, точність збільшувалась (спочатку я досягала 68% за допомогою лише двох згортків). Крім того, я вже збільшую свій набір даних, я оперую 50000 зображеннями.
Хуан Антоніо Гомес Моріано

2

Одне, про що ще не було сказано, і яке ви можете розглянути на майбутнє: ви все одно можете збільшити кількість відсівів на повністю пов'язаних шарах.

Одного разу я прочитав статтю, в якій використовувався 90% коефіцієнт відмови. Хоча було багато багато вузлів (2048, якщо я правильно пригадую), я спробував це на шарах з меншою кількістю вузлів, і це було дуже корисно в деяких випадках.

Я просто подивився, який це папір. Я не можу згадати, який документ я просто запам'ятав, але я виявив, що вони також мали певний успіх із 90% -ними показниками відмови.

Karpathy, A., Toderici, G., Shetty, S., Leung, T., Sukthankar, R., & Fei-Fei, L. (2014). Масштабна відео класифікація з конволюційними нейронними мережами. У матеріалах конференції IEEE про комп'ютерне бачення та розпізнавання образів (с. 1725-1732).

Симонян, К. та Зіссерман, А. (2014). Двопотокові згорткові мережі для розпізнавання дій у відео. У досягненні нейронних систем обробки інформації (с. 568-576).

Varol, G., Laptev, I., & Schmid, C. (2017). Довгострокові часові згортки для розпізнавання дій. Угоди IEEE щодо аналізу шаблонів та машинного інтелекту.


0

У мене теж була ця проблема. Покуривши з нею годинами, випадково я вирішив перетасувати дані, перш ніж подавати їх у систему та вуаля, вони почали працювати. Мені знадобилося трохи зрозуміти, що саме перетасування зробило трюк! Сподіваюся, це рятує когось від розчарування!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.