Error de memoria al usar más capas en el modelo CNN

7

En mi computadora portátil dell core i7 - 16GB RAM - 4gb 960m GPU, estoy trabajando en un proyecto para clasificar las imágenes de CT de pulmón usando CNN 3d. Estoy usando la versión de CPU de tensorflow. Las imágenes se preparan como tamaño de matriz numpy (25,50,50).

Mi modelo CNN tenía 2 capas conv, dos capas maxpool, una capa FC y una capa de salida. Con esta arquitectura, podría entrenar el modelo con aproximadamente (5000 a 6000) muestras. Después de agregar más capas, mi modelo ahora tiene 6 capas conv, 3 capas de grupo máximo, FC y capa de salida. Mi problema es que después de cambiar la arquitectura con solo más de 1000 muestras, mi memoria se llena y recibo un error de memoria. Traté de hacer lotes más pequeños, pero cada vez obtenía el mismo error. Tengo dos preguntas:

  1. ¿Por qué al agregar más capas el modelo necesita más memoria?

  2. ¿Hay alguna forma de lidiar con este tipo de problema?

Hunar A.Ahmed
fuente
Es probable que sea porque está teniendo una gran cantidad de parámetros y por defecto de la GPU se está utilizando para los cálculos y 4 GB puede no encajar ..
Aditya
Uso la versión de CPU de tensorflow no GPU
Hunar A.Ahmed

Respuestas:

4
  1. Más capas significan más parámetros para su red, lo que a su vez significa más espacio requerido en la memoria para almacenar esos parámetros.

  2. La única solución (además de aumentar la memoria de su computadora) es reducir el tamaño de su red. Algunos consejos sobre esto: en primer lugar, las CNN 3-D requieren mucho más espacio que las 2-D. Una idea podría ser cambiar a 2-D. Aparte de eso, las capas con más parámetros son las FC. Estos a veces son redundantes. Sugeriría reducir el tamaño de esos primero.

MzdR
fuente
Creo que 3d CNN está dando una mejor precisión que 2d, para eso usé 3d CNN. el número de nodos en mi capa FC es 1024, ¿quieres decir reducir eso? ¿Esto no afecta la precisión?
Hunar A. Ahmed
1
1024204820481024+10242.1140m100m
4

Agregando al punto hecho por MzdR, también podría intentar usar generadores en su lugar. Como su modelo realmente no necesitará tener todas sus imágenes en la memoria durante el entrenamiento, creo que un generador debería funcionar bien.

Mira esta pregunta desde stackoverflow. Los generadores son geniales cuando tienes una ganga de memoria. Pero si esto también falla, intente reducir el tamaño de sus capas FC.

gavin
fuente
Creo que el generador es una idea interesante para mi caso y lo intentaré, pero mi problema es que no tengo buena información sobre los generadores porque soy nuevo en Python.
Hunar A.Ahmed
revisa esta publicación mediana sobre el uso de generadores en keras. Podría ayudarlo a tener una idea
gavin
es mucho más fácil en keras, pero mi código está escrito en flujo de tensor sin procesar y no puedo cambiarlo a keras.
Hunar A.Ahmed
esta pregunta desde StackOverflow ayudará a ciencia cierta
Gavin