CNN 모델에서 더 많은 레이어를 사용할 때 메모리 오류


7

내 Dell 코어 i7-16GB RAM-4gb 960m GPU 랩톱에서 3d CNN을 사용하여 폐 CT 이미지를 분류하는 프로젝트를 진행하고 있습니다. CPU 버전의 tensorflow를 사용하고 있습니다. 이미지는 numpy 배열 크기 (25,50,50)로 준비됩니다.

내 CNN 모델에는 2 개의 conv 레이어, 2 개의 maxpool 레이어, 1 개의 FC 레이어 및 출력 레이어가있었습니다. 이 아키텍처를 통해 약 (5000 ~ 6000) 샘플로 모델을 학습 할 수있었습니다. 레이어를 더 추가 한 후 모델에 이제 6 개의 conv 레이어, 3 개의 최대 풀 레이어, FC 및 출력 레이어가 있습니다. 내 문제는 1000 개 이상의 샘플로 아키텍처를 변경 한 후 메모리가 가득 차고 메모리 오류가 발생한다는 것입니다. 더 작은 배치를 만들려고했지만 매번 같은 오류가 발생합니다. 두 가지 질문이 있습니다.

  1. 더 많은 레이어를 추가하여 모델에 더 많은 메모리가 필요한 이유는 무엇입니까?

  2. 이러한 유형의 문제를 처리 할 수있는 방법이 있습니까?


아마도 많은 매개 변수가 있고 기본적으로 GPU가 계산에 사용되고 4gb가 맞지 않을 수 있기 때문일 것입니다.
Aditya

GPU가 아닌 tensorflow의 CPU 버전을 사용합니다
Hunar A.Ahmed

답변:


4
  1. 계층이 많을수록 네트워크에 더 많은 매개 변수가 필요하므로 해당 매개 변수를 저장하기 위해 메모리에 더 많은 공간이 필요합니다.

  2. 컴퓨터 메모리를 늘리는 것 외에 유일한 해결책은 네트워크 크기를 줄이는 것입니다. 이에 대한 몇 가지 지침 : 첫째, 3D CNN은 2D보다 훨씬 더 많은 공간이 필요합니다. 한 가지 아이디어는 2D 아이디어로 전환하는 것입니다. 그 외에는 매개 변수가 가장 많은 레이어가 FC 레이어입니다. 이들은 때때로 중복됩니다. 먼저 크기를 줄이는 것이 좋습니다.


3d CNN을 사용했기 때문에 3d CNN이 2d보다 더 나은 정확도를 제공한다고 생각합니다. 내 FC 레이어의 노드 수는 1024입니다. 줄이려고합니까? 정확도에 영향을 미치지 않습니까?
Hunar A. Ameded

1
FC 레이어의 뉴런 (또는 출력) 수는 입니다. 입력이 다른 이라고 가정 하면 총 매개 변수 수는 또는 약 백만 매개 변수입니다. 이것은 단일 레이어에 대한 많은 수의 매개 변수입니다. 다른 예를 들어 매개 변수 를 가진 VGG19 아키텍처를 볼 수 있습니다. 그 중 은 단일 FC 계층에 속합니다. 1024204820481024+10242.1140m100m
MzdR

4

님이 만든 지점에 추가하여 MzdR대신 발전기를 사용해 볼 수도 있습니다. 모델이 훈련 중에 모든 이미지를 메모리에 저장할 필요는 없으므로 발전기가 제대로 작동해야한다고 생각합니다.

질문을 stackoverflow에서 확인하십시오 . 메모리 할인시 발전기는 매우 시원합니다. 그러나 이것이 실패하면 FC 레이어의 크기를 줄이십시오.


나는 발전기가 내 경우에 흥미로운 아이디어라고 생각하고 그것을 시도 할 것이지만, 내 문제는 내가 파이썬에서 새로운 발전기 cuz에 대한 좋은 정보가 없다는 것입니다.
Hunar A. Ameded

keras에서 발전기를 사용하는 것에 대한 이 매체 게시물을 살펴보십시오 . 아이디어를 얻는 데 도움이 될 것입니다.
gavin

keras에서는 훨씬 쉽지만 코드는 원시 tensorflow로 작성되었으며 keras로 변경할 수 없습니다.
Hunar A.Ahmed

stackoverflow 의이 질문은 확실히 도움이 될 것입니다.
gavin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.