Ошибка памяти при использовании большего количества слоев в модели CNN

7

На моем dell core i7 - 16 ГБ ОЗУ - 4 ГБ 960-метровый ноутбук с графическим процессором я работаю над проектом по классификации изображений КТ легких с использованием 3D CNN. Я использую процессорную версию tenorflow. Изображения подготовлены как размер массива (25,50,50).

В моей модели CNN было 2 слоя конвона, два слоя maxpool, один слой FC и выходной слой. С этой архитектурой я мог обучить модель приблизительно (от 5000 до 6000) образцов. После добавления дополнительных слоев моя модель теперь имеет 6 слоев конвоя, 3 слоя максимального пула, FC и выходной слой. Моя проблема в том, что после изменения архитектуры с более чем 1000 выборок моя память заполняется, и я получаю ошибку памяти. Я пытался делать меньшие партии, но каждый раз получал одну и ту же ошибку. У меня есть два вопроса:

  1. Почему при добавлении большего количества слоев модели требуется больше памяти?

  2. Есть ли способ решить эту проблему?

Хунар А. Ахмед
источник
Вероятно, это потому, что у вас много параметров, и по умолчанию ваш графический процессор используется для вычислений, а 4 ГБ может не подходить ..
Aditya
Я использую процессорную версию тензорного потока, а не графический процессор
Хунар А. Ахмед

Ответы:

4
  1. Чем больше слоев, тем больше параметров для вашей сети, что, в свою очередь, означает, что в памяти требуется больше места для хранения этих параметров.

  2. Единственное решение (помимо увеличения памяти вашего компьютера) - это уменьшение размера вашей сети. Несколько указаний на это: во-первых, 3-D CNN требуют намного больше места, чем 2-D. Одной из идей может быть переход на двумерную. Кроме этого, слои с наибольшим количеством параметров являются слоями FC. Это иногда избыточно. Я бы посоветовал сначала уменьшить их размер.

MzdR
источник
Я думаю, что 3d CNN дает лучшую точность, чем 2d, для этого я использовал 3d CNN. количество узлов в моем слое FC - 1024, вы хотите уменьшить это? это не влияет на точность?
Хунар А. Ахмед
1
1024204820481024+10242.1140m100m
4

В дополнение к этому MzdR, вы также можете попробовать использовать генераторы. Поскольку вашей модели на самом деле не понадобится хранить все ваши изображения в памяти во время тренировок, я думаю, что генератор должен хорошо работать.

Проверьте этот вопрос из stackoverflow. Генераторы довольно крутые, когда вы заключаете сделку с памятью. Но если и это не поможет, попробуйте уменьшить размер ваших слоев FC.

Gavin
источник
Я думаю, что генератор - интересная идея для моего случая, и я попробую, но моя проблема в том, что я не очень хорошо разбираюсь в генераторах, потому что я новичок в python.
Хунар А. Ахмед
Пройдите этот средний пост по использованию генераторов в керасе. Это может помочь вам понять
Гэвин
это намного проще в keras, но мой код написан в raw тензорном потоке, и я не могу изменить его на keras.
Хунар А. Ахмед
этот вопрос от stackoverflow поможет наверняка
Гэвин