Speicherfehler bei Verwendung mehrerer Ebenen im CNN-Modell

7

Auf meinem Dell Core i7 - 16 GB RAM - 4 GB 960 m GPU-Laptop arbeite ich an einem Projekt zur Klassifizierung von Lungen-CT-Bildern mithilfe von 3D-CNN. Ich verwende die CPU-Version von Tensorflow. Die Bilder werden als Numpy-Array-Größe (25,50,50) vorbereitet.

Mein CNN-Modell hatte 2 Conv-Schichten, zwei Maxpool-Schichten, eine FC-Schicht und eine Ausgangsschicht. Mit dieser Architektur konnte ich das Modell mit ungefähr (5000 bis 6000) Beispielen trainieren. Nach dem Hinzufügen weiterer Ebenen verfügt mein Modell nun über 6 Conv-Ebenen, 3 Max-Pool-Ebenen, FC und Ausgabeebene. Mein Problem ist, dass nach dem Ändern der Architektur mit nur mehr als 1000 Samples mein Speicher gefüllt wird und ich einen Speicherfehler erhalte. Ich habe versucht, kleinere Chargen zu erstellen, aber jedes Mal wurde der gleiche Fehler angezeigt. Ich habe zwei Fragen:

  1. Warum benötigt das Modell durch Hinzufügen weiterer Ebenen mehr Speicher?

  2. Gibt es eine Möglichkeit, mit dieser Art von Problem umzugehen?

Hunar A.Ahmed
quelle
Es ist wahrscheinlich, weil Sie viele Parameter haben und standardmäßig Ihre GPU für Berechnungen verwendet wird und 4 GB möglicherweise nicht passen.
Aditya
Ich benutze CPU-Version von Tensorflow nicht GPU
Hunar A.Ahmed

Antworten:

4
  1. Mehr Schichten bedeuten mehr Parameter für Ihr Netzwerk, was wiederum mehr Speicherplatz zum Speichern dieser Parameter bedeutet.

  2. Die einzige Lösung (neben der Erhöhung des Arbeitsspeichers Ihres Computers) ist die Reduzierung der Größe Ihres Netzwerks. Ein paar Hinweise dazu: Erstens benötigen 3D-CNNs viel mehr Platz als 2D-CNNs. Eine Idee könnte sein, zu einer 2-D zu wechseln. Davon abgesehen sind die Schichten mit den meisten Parametern die FC-Schichten. Diese sind manchmal überflüssig. Ich würde vorschlagen, zuerst die Größe dieser zu reduzieren.

MzdR
quelle
Ich denke, dass 3d CNN eine bessere Genauigkeit als 2d liefert, dafür habe ich 3d CNN verwendet. Die Anzahl der Knoten in meiner FC-Schicht beträgt 1024. Meinst du das reduzieren? Beeinträchtigt dies nicht die Genauigkeit?
Hunar A.Ahmed
1
Die Anzahl der Neuronen (oder Ausgänge) Ihrer FC-Schicht beträgt . Wenn die Eingaben weitere 2048 sind , beträgt die Gesamtzahl der Parameter 2048 1024 + 1024 oder ungefähr 2,1 Millionen Parameter. Dies ist eine große Anzahl von Parametern für eine einzelne Schicht. Ein weiteres Beispiel ist die VGG19-Architektur mit 140 m Parametern, von denen 100 m zu einer einzelnen FC-Schicht gehören. 1024204820481024+10242.1140m100m
MzdR
4

Zusätzlich zu dem Punkt gemacht durch MzdR, könnten Sie auch versuchen , stattdessen Generatoren verwenden. Da Ihr Model während des Trainings nicht unbedingt alle Ihre Bilder im Speicher haben muss, sollte ein Generator meiner Meinung nach gut funktionieren.

Überprüfen Sie diese Frage aus dem Stackoverflow. Generatoren sind ziemlich cool, wenn Sie ein Schnäppchen machen. Wenn dies ebenfalls fehlschlägt, versuchen Sie, die Größe Ihrer FC-Ebenen zu verringern.

Gavin
quelle
Ich denke, der Generator ist eine interessante Idee für meinen Fall und ich werde es versuchen, aber mein Problem ist, dass ich keine guten Informationen über Generatoren habe, weil ich neu in Python bin.
Hunar A.Ahmed
Gehen Sie diesen mittleren Beitrag über die Verwendung von Generatoren in Keras durch. Es könnte Ihnen helfen, eine Idee zu bekommen
Gavin
In Keras ist es viel einfacher, aber mein Code ist in rohem Tensorflow geschrieben und ich kann ihn nicht in Keras ändern.
Hunar A.Ahmed
Diese Frage von Stackoverflow wird sicher helfen
Gavin