Kesalahan memori saat menggunakan lebih banyak lapisan dalam model CNN

7

Pada laptop dell core i7 - 16GB RAM - 4gb 960m GPU, saya mengerjakan proyek untuk mengklasifikasikan gambar CT paru menggunakan CNN 3d. Saya menggunakan versi CPU tensorflow. Gambar disiapkan sebagai ukuran array numpy (25,50,50).

Model CNN saya memiliki 2 lapisan konv, dua lapisan maxpool, satu lapisan FC dan lapisan keluaran. Dengan arsitektur ini saya bisa melatih model dengan sekitar (5000 hingga 6000) sampel. Setelah menambahkan lebih banyak lapisan model saya sekarang memiliki 6 lapisan konv, 3 lapisan max-pool, FC dan lapisan keluaran. Masalah saya adalah setelah mengubah arsitektur dengan hanya lebih dari 1000 sampel memori saya terisi dan saya mendapatkan kesalahan memori. Saya mencoba membuat batch yang lebih kecil, tetapi setiap kali mendapatkan kesalahan yang sama. Saya punya dua pertanyaan:

  1. Mengapa dengan menambahkan lebih banyak lapisan, model membutuhkan lebih banyak memori?

  2. Apakah ada cara untuk mengatasi masalah seperti ini?

Hunar A.Ahmed
sumber
Itu mungkin karena Anda memiliki banyak Parameter dan secara default GPU Anda sedang digunakan untuk perhitungan dan 4GB mungkin tidak cocok ..
Aditya
Saya menggunakan versi CPU tensorflow bukan GPU
Hunar A.Ahmed

Jawaban:

4
  1. Lebih banyak lapisan berarti lebih banyak parameter untuk jaringan Anda, yang pada gilirannya berarti lebih banyak ruang yang diperlukan dalam memori untuk menyimpan parameter tersebut.

  2. Satu-satunya solusi (selain menambah memori komputer Anda) adalah mengurangi ukuran jaringan Anda. Beberapa petunjuk tentang ini: Pertama, CNN 3-D membutuhkan lebih banyak ruang daripada yang 2-D. Satu ide bisa bergeser ke yang 2-D. Selain itu, lapisan dengan parameter terbanyak adalah yang FC. Ini terkadang berlebihan. Saya sarankan mengurangi ukurannya terlebih dahulu.

MzdR
sumber
Saya pikir 3d CNN memberikan akurasi yang lebih baik daripada 2d, untuk itu saya menggunakan 3d CNN. jumlah node di lapisan FC saya adalah 1024, maksud Anda mengurangi itu? Apakah ini tidak memengaruhi keakuratan?
Hunar A.Ahmed
1
1024204820481024+10242.1140m100m
4

Menambahkan ke titik yang dibuat oleh MzdR, Anda juga bisa mencoba menggunakan generator. Karena Anda model tidak akan benar-benar membutuhkan semua gambar Anda dalam memori saat pelatihan, saya pikir generator harus berfungsi dengan baik.

Lihat pertanyaan ini dari stackoverflow. Generator cukup keren saat Anda sedang tawar-menawar memori. Tetapi jika ini juga gagal, coba kurangi ukuran lapisan FC Anda.

gavin
sumber
Saya pikir generator adalah ide yang menarik untuk kasus saya dan saya akan mencobanya, tetapi masalah saya adalah saya tidak mendapatkan info yang baik tentang generator karena saya baru dalam python.
Hunar A.Ahmed
melalui pos media ini tentang menggunakan generator di keras. Mungkin membantu Anda mendapatkan ide
gavin
itu jauh lebih mudah di keras, tetapi kode saya ditulis dalam tensorflow mentah dan saya tidak dapat mengubahnya menjadi keras.
Hunar A.Ahmed
pertanyaan ini dari stackoverflow pasti akan membantu
gavin