Errore di memoria quando si utilizzano più layer nel modello CNN


7

Sul mio Dell Core i7 - 16GB RAM - 4Gb 960m GPU laptop, sto lavorando a un progetto per classificare le immagini CT del polmone usando la CNN 3d. Sto usando la versione CPU di tensorflow. Le immagini sono preparate come dimensione numerica dell'array (25,50,50).

Il mio modello CNN aveva 2 strati conv, due strati maxpool, uno strato FC e uno di output. Con questa architettura ho potuto addestrare il modello con circa (da 5000 a 6000) campioni. Dopo aver aggiunto più layer, il mio modello ora ha 6 layer conv, 3 layer max pool, FC e layer output. Il mio problema è dopo aver modificato l'architettura con poco più di 1000 campioni, la mia memoria si riempie e ricevo un errore di memoria. Ho provato a creare lotti più piccoli, ma ogni volta ottenendo lo stesso errore. Ho due domande:

  1. Perché aggiungendo più livelli il modello ha bisogno di più memoria?

  2. C'è un modo per affrontare questo tipo di problema?


Probabilmente è perché hai molti parametri e per impostazione predefinita la tua GPU viene utilizzata per i calcoli e 4 GB potrebbe non adattarsi.
Aditya

Uso la versione CPU di tensorflow non GPU
Hunar A.Ahmed

Risposte:


4
  1. Più livelli significano più parametri per la tua rete, il che a sua volta significa più spazio richiesto in memoria per memorizzare quei parametri.

  2. L'unica soluzione (oltre ad aumentare la memoria del computer) è ridurre le dimensioni della rete. Alcuni suggerimenti su questo: in primo luogo, i CNN 3D richiedono molto più spazio di quelli 2D. Un'idea potrebbe essere quella di passare a una 2D. Oltre a ciò, i layer con il maggior numero di parametri sono quelli FC. Questi sono talvolta ridondanti. Suggerirei di ridurre prima le dimensioni di quelli.


Penso che 3d CNN stia dando una precisione migliore di 2d, per questo ho usato 3d CNN. il numero di nodi nel mio livello FC è 1024, intendi ridurlo? questo non influisce sulla precisione?
Hunar A.Ahmed,

1
1024204820481024+10242.1140m100m

4

Aggiungendo al punto sollevato MzdR, potresti anche provare a usare i generatori. Dato che il tuo modello non avrà davvero bisogno di avere tutte le tue immagini in memoria durante l'allenamento, penso che un generatore dovrebbe servire bene.

Dai un'occhiata a questa domanda da StackOverflow. I generatori sono piuttosto fighi quando hai un affare di memoria. Ma se anche questo fallisce, prova a ridurre le dimensioni dei tuoi strati FC.


Penso che il generatore sia un'idea interessante per il mio caso e lo proverò, ma il mio problema è che non ho buone informazioni sui generatori perché sono nuovo in Python.
Hunar A. Ahmed,

passare attraverso questo post medio sull'utilizzo di generatori in keras. Potrebbe aiutarti a farti un'idea
Gavin

è molto più semplice in keras, ma il mio codice è scritto in raw tensorflow e non posso cambiarlo in keras.
Hunar A. Ahmed,

questa domanda da StackOverflow sarà di sicuro aiuto
Gavin
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.