ฟังก์ชั่นการสูญเสียสำหรับการแบ่งส่วนความหมาย


10

ขอโทษสำหรับการใช้ผิดข้อกำหนดทางเทคนิค ฉันกำลังทำงานในโครงการของการแบ่งส่วนความหมายผ่านเครือข่ายประสาทเทียม (CNNs); พยายามใช้สถาปัตยกรรมประเภท Encoder-Decoder ดังนั้นเอาต์พุตจะมีขนาดเท่ากับอินพุต

คุณออกแบบฉลากอย่างไร สิ่งที่ฟังก์ชั่นการสูญเสียควรใช้? โดยเฉพาะอย่างยิ่งในสถานการณ์ของความไม่สมดุลของคลาสหนัก (แต่อัตราส่วนระหว่างคลาสเป็นตัวแปรจากรูปภาพต่อภาพ)

ปัญหาเกี่ยวข้องกับสองคลาส (วัตถุที่น่าสนใจและพื้นหลัง) ฉันกำลังใช้ Keras กับแบ็กเอนด์เทนโฟลว์

จนถึงตอนนี้ฉันกำลังออกแบบเอาท์พุทที่คาดหวังว่าจะมีขนาดเท่ากับภาพอินพุตโดยใช้การติดฉลากแบบพิกเซล เลเยอร์สุดท้ายของแบบจำลองมีการเปิดใช้งาน softmax อย่างใดอย่างหนึ่ง (สำหรับ 2 คลาส) หรือการเปิดใช้งาน sigmoid (เพื่อแสดงความน่าจะเป็นที่พิกเซลนั้นอยู่ในคลาสของออบเจ็กต์) ฉันมีปัญหาในการออกแบบฟังก์ชั่นวัตถุประสงค์ที่เหมาะสมสำหรับงานประเภท:

function(y_pred,y_true),

ในข้อตกลงกับKeras

โปรดพยายามระบุขนาดของเทนเซอร์ที่เกี่ยวข้อง (อินพุต / เอาท์พุตของโมเดล) ความคิดและข้อเสนอแนะใด ๆ ที่ชื่นชมมาก ขอบคุณ !


อ่านarxiv.org/pdf/1511.00561.pdfนี้"เราใช้การสูญเสียข้ามเอนโทรปีเป็นหน้าที่วัตถุประสงค์ในการฝึกอบรมเครือข่าย"
Miss Palmer

คำตอบ:


6

การข้ามเอนโทรปีเป็นวิธีการที่แน่นอน ฉันไม่รู้ Keras แต่ TF มีสิ่งนี้: https://www.tensorflow.org/api_docs/python/tf/nn/sigmoid_cross_entropy_with_logits

นี่คือบทความที่นำมาใช้โดยตรง: เครือข่าย Convolutional สำหรับการแบ่งกลุ่มแบบ Semanticโดย Shelhamer et al.

กระดาษ U-Netยังเป็นการดำเนินงานที่ประสบความสำเร็จมากของความคิดโดยใช้การเชื่อมต่อเฮี๊ยบกับการสูญเสียของการหลีกเลี่ยงความละเอียดเชิงพื้นที่ คุณสามารถค้นหาการใช้งานหลายอย่างนี้ในเน็ต

จากประสบการณ์ส่วนตัวของฉันคุณอาจต้องการเริ่มต้นด้วยเครือข่าย encoder-decoder อย่างง่าย ๆ ก่อน แต่อย่าใช้ strides (หรือ strides = 1) มิฉะนั้นคุณจะสูญเสียความคมชัดมากเพราะการสุ่มไม่สมบูรณ์ ไปกับขนาดเคอร์เนลขนาดเล็ก ฉันไม่รู้จักแอปพลิเคชันของคุณโดยเฉพาะ แต่แม้แต่เครือข่ายเลเยอร์ที่ซ่อนอยู่ 2-3 แห่งก็ให้ผลลัพธ์ที่ดีมาก ใช้ 32-64 ช่องในแต่ละชั้น เริ่มจากเลเยอร์เรียบง่าย 2 เลเยอร์ที่ซ่อนไว้ 32 แชนเนลแต่ละอัน 3x3 เมล็ดก้าวย่าง = 1 และทดลองกับพารามิเตอร์ในลักษณะแยกเพื่อดูผลกระทบ รักษาขนาดให้เท่ากับขนาดอินพุตเสมอสำหรับ starters เพื่อหลีกเลี่ยงการสูญเสียความละเอียด หลังจากนั้นคุณสามารถเปิดใช้งานความก้าวหน้าและการสุ่มตัวอย่างและใช้แนวคิดเช่น U-Net U-Net ทำงานได้ดีมากสำหรับการแบ่งส่วนภาพทางการแพทย์

สำหรับคลาสที่ไม่สมดุลดูhttps://swarbrickjones.wordpress.com/2017/03/28/cross-entropy-and-training-test-class-imbalance/ นี่คือแนวคิดที่จะเพิ่มน้ำหนักคลาสที่แตกต่างด้วยและพารามิเตอร์αβ


ฉันไม่ใช่ผู้เชี่ยวชาญในโดเมนนี้ แต่ไม่ควรเรียนพิเศษในการตั้งค่านี้ ถ้าใช่จะไม่สูญเสีย softmax จะเป็นตัวเลือกที่ดีกว่า tensorflow.org/api_docs/python/tf/nn/…
Harald Thomson

1
@HaraldThomson การแบ่งกลุ่มเป็นปัญหาไบนารี หลายคนใช้ softmax สำหรับปัญหาไบนารี แต่มันไม่จำเป็นอย่างสมบูรณ์และ overkill แทนที่จะมีสองโหนดเอาต์พุตให้มีโหนดเอาต์พุตหนึ่งโหนดที่แทน P (y = 1) จากนั้นใช้ cross-entropy
Ricardo Cruz

2

ใช้การลดน้ำหนักแบบลูกเต๋าและการสูญเสียพลังงานแบบเอนโทรปี การสูญเสียลูกเต๋าดีมากสำหรับการแบ่งส่วน น้ำหนักที่คุณสามารถเริ่มต้นได้ควรเป็นความถี่ของคลาสที่ถูกบุกรุกนั่นคือตัวอย่าง 50-100 ตัวอย่างหาจำนวนพิกเซลเฉลี่ยของแต่ละชั้นเรียนและทำให้น้ำหนักของชั้นเรียนนั้น 1 / เฉลี่ย คุณอาจต้องใช้ลูกเต๋าด้วยตัวคุณเอง แต่มันก็ง่าย นอกจากนี้คุณสามารถดูการสูญเสียลูกเต๋าผกผันและการสูญเสียโฟกัส


-1

ให้ฉันเจาะจงมากขึ้นตอนแรกแล้วก็กว้างขึ้น ฉันขอโทษถ้าฉันเข้าใจคุณผิด

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

โดยทั่วไปแล้วคุณดูเหมือนจะสร้างรูปแบบการเรียนรู้ของเครื่องที่ซับซ้อนมากตั้งแต่คุณพูดถึง CNN ซีเอ็นเอ็นและโมเดลการเรียนรู้ลึกอื่น ๆ เป็นโมเดลการเรียนรู้ของเครื่องที่ซับซ้อนที่สุดที่มีอยู่

การเลือกมิติ, ฉลากและฟังก์ชั่นการสูญเสียนั้นเป็นเหมือนการเรียนรู้ของเครื่องระดับประถมศึกษา ฉันคิดว่าคุณอาจจะอยู่ในหัวของคุณด้วยการเรียนรู้ลึก คุณได้เรียนการเรียนรู้ของเครื่องจักรเก่าแบบธรรมดาก่อนหรือไม่?


มันจำเป็นหรือไม่ ตัวอย่างเช่นดูวิธี Pixon
Carl

มันเป็นวิธีการที่ถูกต้อง: arxiv.org/pdf/1511.00561.pdf
Miss Palmer

"ซีเอ็นเอ็นและโมเดลการเรียนรู้เชิงลึกอื่น ๆ เป็นรูปแบบการเรียนรู้ด้วยเครื่องจักรที่ซับซ้อนที่สุด" ฉันมักจะไม่เห็นด้วย แบบจำลองในตัวมันเองอาจจะซับซ้อน แต่จริงๆแล้วมันง่ายมากที่จะใช้ด้วยความเข้าใจทางทฤษฎีน้อยมาก นั่นคือเหตุผลของการขัดต่อ hype ทั้งหมดเกี่ยวกับ DL, ทฤษฎีเล็ก ๆ น้อย ๆ , ง่ายต่อการเขียนแบบจำลองและความแม่นยำสูงมาก ...
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.