Помилка пам'яті при використанні більше шарів у моделі CNN


7

На моєму ядро ​​Dell i7 - 16 ГБ оперативної пам’яті - 4 ГБ 960 м графічного процесора, я працюю над проектом, щоб класифікувати зображення легких КТ за допомогою 3D-CNN. Я використовую версію процесора tensorflow. Зображення готуються у вигляді масивного масиву (25,50,50).

У моїй моделі CNN було 2 шари конвеєра, два макспул-шару, один шар FC і вихідний шар. Завдяки цій архітектурі я міг би навчити модель приблизно (від 5000 до 6000) зразків. Після додавання більше шарів у моєї моделі тепер є 6 шарів conv, 3 максимум шару пулу, FC та вихідний шар. Моя проблема полягає в тому, що після зміни архітектури з більш ніж 1000 зразками моя пам'ять заповнюється, і я отримую помилку пам'яті. Я намагався робити менші партії, але щоразу отримував однакові помилки. У мене є два питання:

  1. Чому додаючи більше шарів, моделі потрібно більше пам’яті?

  2. Чи є спосіб вирішити цю проблему?


Це, мабуть, тому, що у вас багато параметрів, і за замовчуванням ваш GPU використовується для обчислень, а 4 Гб може не відповідати ..
Aditya

Я використовую версію процесора tensorflow, а не GPU
Hunar A.Ahmed

Відповіді:


4
  1. Більше шарів означає більше параметрів для вашої мережі, що в свою чергу означає більше необхідного місця в пам'яті для зберігання цих параметрів.

  2. Єдине рішення (крім збільшення пам'яті комп'ютера) - зменшення розміру вашої мережі. Кілька покажчиків на це: По-перше, 3-D CNN потребують значно більше місця, ніж 2-D. Однією з ідей може бути перехід до двовимірної. Крім цього, шари з найбільшою кількістю параметрів - це FC. Вони іноді є зайвими. Я б запропонував зменшити розмір спочатку.


Я думаю, що 3d CNN дає кращу точність, ніж 2d, для цього я використовував 3d CNN. кількість вузлів у моєму шарі FC становить 1024, ви маєте на увазі зменшення цього? це не впливає на точність?
Хунар А.Ахмед

1
Кількість нейронів (або виходів) у вашому шарі FC становить . Якщо, скажімо, його вхідними даними є ще , то загальна кількість параметрів складе або приблизно мільйона параметрів. Це велика кількість параметрів для одного шару. Для іншого прикладу ви можете подивитися архітектуру VGG19, яка має параметрів, м яких належать до одного шару FC. 1024204820481024+10242.1140m100m
MzdR

4

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

Перевірте це запитання з stackoverflow. Генератори доволі круті, коли ви перебуваєте в операції з пам'яттю. Але якщо це також не вдасться, спробуйте зменшити розмір шарів FC.


Я думаю, що генератор - це цікава ідея для мого випадку, і я спробую це, але моя проблема полягає в тому, що я не маю гарної інформації про генератори, тому що я новачок у python.
Хунар А.Ахмед

пройдіть цей середній пост про використання генераторів у керах. Це може допомогти вам отримати ідею
Gavin

у керах набагато простіше, але мій код записаний у сирому тензорфлоу, і я не можу змінити його на кери.
Хунар А.Ахмед

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