Erreur de mémoire lors de l'utilisation de plusieurs couches dans le modèle CNN


7

Sur mon ordinateur portable Dell Core i7 - 16 Go de RAM - 4 Go 960 m GPU, je travaille sur un projet de classification des images CT pulmonaires à l'aide de CNN 3D. J'utilise la version CPU de tensorflow. Les images sont préparées sous forme de tableau numpy (25,50,50).

Mon modèle CNN avait 2 couches conv, deux couches maxpool, une couche FC et une couche de sortie. Avec cette architecture, j'ai pu former le modèle avec environ (5000 à 6000) échantillons. Après avoir ajouté plus de couches, mon modèle a maintenant 6 couches conv, 3 couches max-pool, FC et couche de sortie. Mon problème est après avoir changé l'architecture avec un peu plus de 1000 échantillons, ma mémoire est remplie et j'obtiens une erreur de mémoire. J'ai essayé de faire des lots plus petits, mais à chaque fois j'ai la même erreur. J'ai deux questions:

  1. Pourquoi en ajoutant plus de couches, le modèle a besoin de plus de mémoire?

  2. Existe-t-il un moyen de traiter ce type de problème?


C'est probablement parce que vous avez beaucoup de paramètres et que par défaut votre GPU est utilisé pour les calculs et que 4 Go pourraient ne pas convenir.
Aditya

J'utilise la version CPU de tensorflow et non GPU
Hunar A.Ahmed

Réponses:


4
  1. Plus de couches signifient plus de paramètres pour votre réseau, ce qui signifie à son tour plus d'espace requis en mémoire pour stocker ces paramètres.

  2. La seule solution (en plus d'augmenter la mémoire de votre ordinateur) est de réduire la taille de votre réseau. Quelques indications à ce sujet: Premièrement, les CNN 3D nécessitent beaucoup plus d'espace que les CNN 2D. Une idée pourrait être de passer à une 2D. En dehors de cela, les couches avec le plus de paramètres sont les couches FC. Celles-ci sont parfois redondantes. Je suggère de réduire la taille de ceux-ci en premier.


Je pense que 3d CNN donne une meilleure précision que 2D, pour cela j'ai utilisé 3d CNN. le nombre de nœuds dans ma couche FC est de 1024, voulez-vous dire que réduire cela? est-ce que cela n'affecte pas la précision?
Hunar A.Ahmed

1
1024204820481024+10242.1140m100m

4

Pour ajouter au point soulevé par MzdR, vous pouvez également essayer d'utiliser des générateurs à la place. Comme votre modèle n'aura pas vraiment besoin d'avoir toutes vos images en mémoire pendant l'entraînement, je pense qu'un générateur devrait bien servir.

Vérifiez cette question à partir de stackoverflow. Les générateurs sont plutôt cool quand vous êtes sur une bonne affaire de mémoire. Mais si cela échoue également, essayez de réduire la taille de vos couches FC.


Je pense que le générateur est une idée intéressante pour mon cas et je vais l'essayer, mais mon problème est que je n'ai pas de bonnes informations sur les générateurs car je suis nouveau en python.
Hunar A.Ahmed

passer par ce poste moyen sur l'utilisation des générateurs dans les keras. Cela pourrait vous aider à vous faire une idée
gavin

c'est beaucoup plus facile en keras, mais mon code est écrit en tensorflow brut et je ne peux pas le changer en keras.
Hunar A.Ahmed

cette question de stackoverflow aidera à coup sûr
gavin
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.