Błąd pamięci podczas używania większej liczby warstw w modelu CNN

7

Na moim laptopie Dell Core i7 - 16 GB RAM - 4GB 960m GPU pracuję nad projektem klasyfikacji obrazów CT płuc przy użyciu 3d CNN. Używam wersji procesora tensorflow. Obrazy są przygotowywane jako tablica liczb numpy (25,50,50).

Mój model CNN miał 2 warstwy konwekcyjne, dwie warstwy maxpool, jedną warstwę FC i warstwę wyjściową. Dzięki tej architekturze mogłem trenować model z około (5000 do 6000) próbek. Po dodaniu kolejnych warstw mój model ma teraz 6 warstw konwekcyjnych, 3 warstwy maksymalnej puli, FC i warstwę wyjściową. Mój problem polega na zmianie architektury z nieco więcej niż 1000 próbek, moja pamięć się zapełnia i pojawia się błąd pamięci. Próbowałem tworzyć mniejsze partie, ale za każdym razem otrzymywałem ten sam błąd. Mam dwa pytania:

  1. Dlaczego poprzez dodanie większej liczby warstw model potrzebuje więcej pamięci?

  2. Czy istnieje sposób na poradzenie sobie z tego rodzaju problemem?

Hunar A.Ahmed
źródło
Prawdopodobnie dlatego, że masz wiele parametrów i domyślnie twój procesor graficzny jest używany do obliczeń i 4 gb może nie pasować.
Aditya
Używam wersji procesora tensorflow, a nie GPU
Hunar A.Ahmed

Odpowiedzi:

4
  1. Więcej warstw oznacza więcej parametrów dla sieci, co z kolei oznacza więcej wymaganego miejsca w pamięci do przechowywania tych parametrów.

  2. Jedynym rozwiązaniem (oprócz zwiększenia pamięci komputera) jest zmniejszenie rozmiaru sieci. Kilka wskazówek na ten temat: Po pierwsze, trójwymiarowe sieci CNN wymagają znacznie więcej miejsca niż dwuwymiarowe. Jednym z pomysłów może być przejście na 2D. Poza tym warstwy o największej liczbie parametrów są warstwami FC. Czasami są one zbędne. Proponuję najpierw zmniejszyć ich rozmiar.

MzdR
źródło
Myślę, że 3d CNN daje lepszą dokładność niż 2d, do tego użyłem 3d CNN. liczba węzłów w mojej warstwie FC wynosi 1024, masz na myśli zmniejszenie tego? czy to nie wpływa na dokładność?
Hunar A.Ahmed
1
Liczba neuronów (lub wyjść) w twojej warstwie FC wynosi 1024. Jeśli powiedzmy, że jego dane wejściowe są inne2048, wówczas łączna liczba parametrów będzie wynosić 20481024+1024 lub w przybliżeniu 2.1milion parametrów. Jest to duża liczba parametrów dla pojedynczej warstwy. Innym przykładem może być architektura VGG19, która ma140m parametry, 100mz których należą do jednej warstwy FC.
MzdR
4

Dodając do tego argument MzdR, możesz również spróbować użyć generatorów. Ponieważ twój model tak naprawdę nie musi mieć wszystkich zdjęć w pamięci podczas treningu, myślę, że generator powinien dobrze służyć.

Sprawdź to pytanie z stackoverflow. Generatory są całkiem fajne, gdy jesteś na targu pamięci. Ale jeśli to również się nie powiedzie, spróbuj zmniejszyć rozmiar swoich warstw FC.

Gavin
źródło
Myślę, że generator jest interesującym pomysłem w mojej sprawie i spróbuję go wypróbować, ale moim problemem jest to, że nie mam dobrych informacji o generatorach, ponieważ jestem nowy w Pythonie.
Hunar A.Ahmed,
przejrzyj ten średni post na temat używania generatorów w keras. Pomoże ci to w
zrobieniu
w keras jest o wiele łatwiej, ale mój kod jest napisany w surowym tensorflow i nie mogę go zmienić na keras.
Hunar A.Ahmed
to pytanie z stackoverflow na pewno pomoże
gavin