CNN modelinde daha fazla katman kullanılırken bellek hatası


7

Dell Core i7 - 16GB RAM - 4GB 960m GPU dizüstü bilgisayarımda, 3B CNN kullanarak akciğer CT görüntülerini sınıflandırmak için bir proje üzerinde çalışıyorum. Tensorflow'un CPU sürümünü kullanıyorum. Görüntüler numpy dizi boyutu (25,50,50) olarak hazırlanır.

CNN modelimde 2 dönüşümlü katman, iki maxpool katman, bir FC katmanı ve çıktı katmanı vardı. Bu mimari ile modeli yaklaşık (5000 ila 6000) örnekle eğitebilirim. Daha fazla katman ekledikten sonra modelimde 6 döngü katman, 3 max-havuz katmanı, FC ve çıkış katmanı var. Benim sorunum sadece 1000'den fazla örnek ile mimariyi değiştirdikten sonra hafızam doluyor ve hafıza hatası alıyorum. Daha küçük gruplar yapmaya çalıştım, ama her defasında aynı hatayı alıyorum. İki sorum var:

  1. Neden daha fazla katman ekleyerek modelin daha fazla belleğe ihtiyacı var?

  2. Bu tür bir sorunla başa çıkmanın herhangi bir yolu var mı?


Muhtemelen bir sürü Parametreye sahip olmanız ve varsayılan olarak GPU'nuz hesaplamalar için kullanılıyor ve 4 gb sığmayabilir.
Aditya

GPU değil tensorflow'un CPU sürümünü kullanıyorum
Hunar A.Ahmed

Yanıtlar:


4
  1. Daha fazla katman, ağınız için daha fazla parametre anlamına gelir, bu da bu parametreleri depolamak için bellekte daha fazla alan anlamına gelir.

  2. Tek çözüm (bilgisayarınızın belleğini artırmanın yanı sıra) ağınızın boyutunu küçültmektir. Bu konuda birkaç işaret: Birincisi, 3-B CNN'ler 2-D olanlardan çok daha fazla alan gerektirir. Bir fikir 2-B'ye geçmek olabilir. Bunun dışında en fazla parametreye sahip katmanlar FC katmanlarıdır. Bunlar bazen gereksizdir. Öncelikle bunların boyutunu küçültmeyi öneririm.


Ben 3d CNN 2d daha iyi doğruluk veriyor düşünüyorum, bunun için 3d CNN kullandım. FC katmanımdaki düğüm sayısı 1024'tür, bunu azaltmak mı demek istediniz? bu doğruluğu etkilemez mi?
Hunar A.Ahmed

1
FC katmanınızın sahip olduğu nöronların (veya çıkışların) sayısı 1024. Diyelim ki girdileri başka2048, toplam parametre sayısı 20481024+1024 veya yaklaşık 2.1milyon parametre. Bu, tek bir katman için çok sayıda parametredir. Başka bir örnek olarak, VGG19 mimarisine bakabilirsiniz.140m parametreleri, 100mbunların tek bir FC katmanına ait olması.
MzdR

4

Tarafından yapılan noktaya ek olarak, MzdRbunun yerine jeneratörleri kullanmayı da deneyebilirsiniz. Model olduğunuzda, eğitim sırasında tüm görüntülerinizin hafızada olması gerekmeyeceğinden, bir jeneratörün iyi hizmet etmesi gerektiğini düşünüyorum.

Stackoverflow bu soruya göz atın . Bir hafıza pazarlığındayken jeneratörler oldukça havalı. Ancak bu da başarısız olursa, FC katmanlarınızın boyutunu azaltmayı deneyin.


Ben jeneratör benim durumum için ilginç bir fikir olduğunu düşünüyorum ve ben deneyeceğim, ama benim sorunum jeneratörler hakkında iyi bilgi yok çünkü ben piton yeni.
Hunar A.Ahmed

keras'ta jeneratörleri kullanma konusunda bu orta mesajdan geçin. Bir fikir edinmenize yardımcı olabilir
Gavin

keras'ta çok daha kolay, ama kodum ham tensorflow ile yazılmış ve bunu keras olarak değiştiremiyorum.
Hunar A.Ahmed

stackoverflow'tan bu soru kesin olarak yardımcı olacaktır
gavin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.