Erro de memória ao usar mais camadas no modelo CNN

7

No meu laptop dell core i7 - 16 GB de RAM - 4 gb de 960 m de GPU, estou trabalhando em um projeto para classificar imagens de TC de pulmão usando a CNN 3d. Estou usando a versão CPU do tensorflow. As imagens são preparadas com um tamanho de matriz numpy (25,50,50).

Meu modelo CNN tinha 2 camadas conv, duas camadas maxpool, uma camada FC e uma camada de saída. Com essa arquitetura, eu pude treinar o modelo com aproximadamente (5000 a 6000) amostras. Depois de adicionar mais camadas, meu modelo agora tem 6 camadas conv, 3 camadas de pool máximo, FC e camada de saída. Meu problema é depois de alterar a arquitetura com pouco mais de 1000 amostras, minha memória fica cheia e eu recebo um erro de memória. Tentei fazer lotes menores, mas sempre obtendo o mesmo erro. Eu tenho duas perguntas:

  1. Por que, adicionando mais camadas, o modelo precisa de mais memória?

  2. Existe alguma maneira de lidar com esse tipo de problema?

Hunar A.Ahmed
fonte
É provavelmente porque você está tendo um monte de parâmetros e, por padrão o seu GPU está sendo usado para cálculos e 4GB pode não se encaixar ..
Aditya
Eu uso a versão CPU de tensorflow não GPU
Hunar A.Ahmed

Respostas:

4
  1. Mais camadas significam mais parâmetros para sua rede, o que, por sua vez, significa mais espaço necessário na memória para armazenar esses parâmetros.

  2. A única solução (além de aumentar a memória do seu computador) é reduzir o tamanho da sua rede. Algumas dicas sobre isso: primeiro, as CNNs 3D exigem muito mais espaço do que as 2D. Uma idéia poderia ser mudar para uma 2D. Fora isso, as camadas com mais parâmetros são as FC. Às vezes são redundantes. Eu sugiro reduzir o tamanho dos primeiros.

MzdR
fonte
Eu acho que a CNN 3d está dando uma precisão melhor que a 2D, por isso usei a CNN 3d. o número de nós na minha camada FC é 1024, você quer dizer reduzir isso? isso não afeta a precisão?
Hunar A.Ahmed
11
O número de neurônios (ou saídas) da sua camada FC é . Se digamos que suas entradas são outro , o número total de parâmetros seria ou aproximadamente milhões de parâmetros. Este é um grande número de parâmetros para uma única camada. Para outro exemplo, você pode olhar para a arquitetura VGG19, que possui parâmetros de , dos quais pertencem a uma única camada FC. 2048 2048 1024 + 1024 2,1 140 m 100 m1024204820481024+10242.1140m100m
MzdR 07/10
4

Além disso MzdR, você também pode tentar usar geradores. Como seu modelo não precisará realmente ter todas as suas imagens na memória durante o treinamento, acho que um gerador deve funcionar bem.

Confira esta pergunta no stackoverflow. Os geradores são muito legais quando você está em uma pechincha de memória. Mas se isso também falhar, tente reduzir o tamanho das suas camadas de FC.

gavin
fonte
Eu acho que o gerador é uma ideia interessante para o meu caso e vou tentar, mas meu problema é que não tenho boas informações sobre geradores, porque sou novo em python.
Hunar A.Ahmed
passar por este post médio sobre o uso de geradores em keras. Ele pode ajudá-lo a ter uma idéia
gavin
é muito mais fácil em keras, mas meu código está escrito em fluxo tensor bruto e não posso alterá-lo para keras.
Hunar A.Ahmed
esta pergunta de stackoverflow vai ajudar com certeza
Gavin