ข้อผิดพลาดของหน่วยความจำเมื่อใช้เลเยอร์เพิ่มเติมในรุ่น CNN


7

ใน dell core i7 ของฉัน - RAM 16GB - แล็ปท็อป GPU ความจุ 4 ล้าน 960m ฉันกำลังทำงานในโครงการเพื่อจัดประเภทภาพปอด CT โดยใช้ 3d CNN ฉันใช้ซีพียูรุ่น tensorflow ภาพถูกจัดทำขึ้นเป็นขนาดอาร์เรย์แบบ numpy (25,50,50)

โมเดล CNN ของฉันมี 2 Conv ชั้น, maxpool สองชั้น, หนึ่งชั้น FC และชั้นผลลัพธ์ ด้วยสถาปัตยกรรมนี้ฉันสามารถฝึกฝนโมเดลด้วยตัวอย่างประมาณ (5,000 ถึง 6,000) หลังจากเพิ่มเลเยอร์มากขึ้นแบบจำลองของฉันตอนนี้มีชั้นความเชื่อมั่น 6 ชั้น, เลเยอร์พูลสูงสุด 3 ชั้น, FC และชั้นผลลัพธ์ ปัญหาของฉันคือหลังจากเปลี่ยนสถาปัตยกรรมที่มีตัวอย่างมากกว่า 1,000 ตัวอย่างหน่วยความจำของฉันเต็มและฉันได้รับข้อผิดพลาดของหน่วยความจำ ฉันพยายามทำให้แบทช์เล็กลง แต่ทุกครั้งที่ได้รับข้อผิดพลาดเดียวกัน ฉันมีสองคำถาม:

  1. ทำไมการเพิ่มเลเยอร์เพิ่มขึ้นโมเดลต้องการหน่วยความจำเพิ่มขึ้น

  2. มีวิธีจัดการกับปัญหาประเภทนี้หรือไม่?


อาจเป็นเพราะคุณมีพารามิเตอร์มากมายและโดยค่าเริ่มต้น GPU ของคุณกำลังถูกใช้ในการคำนวณและ 4gb อาจไม่เหมาะสม ..
Aditya

ฉันใช้รุ่น CPU ของ tensorflow ไม่ใช่ GPU
Hunar A.Ahmed

คำตอบ:


4
  1. เลเยอร์เพิ่มเติมหมายถึงพารามิเตอร์เพิ่มเติมสำหรับเครือข่ายของคุณซึ่งจะหมายถึงพื้นที่ที่ต้องการในหน่วยความจำมากขึ้นเพื่อจัดเก็บพารามิเตอร์เหล่านั้น

  2. ทางออกเดียว (นอกเหนือจากการเพิ่มหน่วยความจำในคอมพิวเตอร์ของคุณ) คือการลดขนาดเครือข่ายของคุณ ตัวชี้สองสามข้อเกี่ยวกับเรื่องนี้: ประการแรกซีเอ็นเอ็น 3 มิติต้องการพื้นที่มากกว่า 2 มิติ แนวคิดหนึ่งอาจเปลี่ยนเป็นแบบ 2 มิติ นอกจากนั้นเลเยอร์ที่มีพารามิเตอร์มากที่สุดคือ FC เหล่านี้ซ้ำซ้อนบางครั้ง ฉันขอแนะนำให้ลดขนาดของครั้งแรก


ฉันคิดว่า 3d CNN ให้ความแม่นยำที่ดีกว่า 2d สำหรับที่ฉันใช้ 3d CNN จำนวนโหนดในเลเยอร์ FC ของฉันคือ 1024 คุณหมายถึงการลดขนาดนั้นหรือไม่? สิ่งนี้ไม่ส่งผลกระทบต่อความถูกต้องหรือไม่
Hunar A.Ahmed

1
จำนวนเซลล์ (หรือเอาต์พุต) เลเยอร์ FC ของคุณคือ 1024. ถ้าสมมุติว่ามันเป็นปัจจัยอีกตัว2048จากนั้นจำนวนพารามิเตอร์ทั้งหมดจะเป็น 20481024+1024 หรือประมาณ 2.1ล้านพารามิเตอร์ นี่เป็นพารามิเตอร์จำนวนมากสำหรับชั้นเดียว สำหรับตัวอย่างอื่นคุณสามารถดูสถาปัตยกรรม VGG19 ซึ่งมี140m พารามิเตอร์ 100mซึ่งอยู่ในชั้น FC เดียว
MzdR

4

เพิ่มไปยังจุดที่ทำโดยMzdRคุณสามารถลองใช้เครื่องกำเนิดไฟฟ้าแทน ในขณะที่คุณกำลังเป็นนางแบบไม่จำเป็นต้องมีภาพทั้งหมดของคุณไว้ในหน่วยความจำขณะฝึกซ้อมฉันคิดว่าตัวสร้างควรทำงานได้ดี

ลองอ่านคำถามนี้จาก stackoverflow เครื่องกำเนิดไฟฟ้าค่อนข้างเย็นเมื่อคุณต่อรองราคากับหน่วยความจำ แต่ถ้าสิ่งนี้ล้มเหลวให้ลองลดขนาดเลเยอร์ FC ของคุณ


ฉันคิดว่าตัวกำเนิดเป็นแนวคิดที่น่าสนใจสำหรับกรณีของฉันและฉันจะลองใช้ แต่ปัญหาของฉันคือฉันไม่ได้ข้อมูลที่ดีเกี่ยวกับเครื่องกำเนิดไฟฟ้าเพราะฉันใหม่ในหลาม
Hunar A.Ahmed

ผ่านการโพสต์สื่อนี้ในการใช้กำเนิดใน keras มันอาจช่วยให้คุณมีความคิด
กาวิน

มันง่ายกว่าใน keras แต่รหัสของฉันเขียนในโปรแกรมเทนเซอร์โฟลว์และฉันไม่สามารถเปลี่ยนเป็น keras ได้
Hunar A.Ahmed

คำถามนี้จากStackOverflowจะช่วยให้การตรวจสอบ
Gavin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.