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:
Dlaczego poprzez dodanie większej liczby warstw model potrzebuje więcej pamięci?
Czy istnieje sposób na poradzenie sobie z tego rodzaju problemem?
źródło
Odpowiedzi:
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.
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.
źródło
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.
źródło