การเรียนรู้หลายงานใน Keras


12

ฉันกำลังพยายามใช้เลเยอร์ที่แชร์ใน Keras ฉันเห็นว่า Keras มีkeras.layers.concatenateแต่ฉันไม่แน่ใจจากเอกสารเกี่ยวกับการใช้งาน ฉันสามารถใช้มันเพื่อสร้างเลเยอร์ที่ใช้ร่วมกันหลายชั้นได้หรือไม่ อะไรจะเป็นวิธีที่ดีที่สุดในการติดตั้งเครือข่ายประสาทส่วนกลางอย่างง่ายดังที่แสดงด้านล่างโดยใช้ Kerasเครือข่ายประสาทที่ใช้ร่วมกัน

โปรดทราบว่ารูปร่างทั้งหมดของอินพุทเอาท์พุทและเลเยอร์ที่แชร์สำหรับ 3 NN ทั้งหมดนั้นเหมือนกัน มีเลเยอร์ที่แชร์หลายอัน (และเลเยอร์ที่ไม่แชร์) ใน NN สามตัว เลเยอร์สีมีความเป็นเอกลักษณ์ของ NN แต่ละตัวและมีรูปร่างเหมือนกัน

โดยทั่วไปรูปภาพแสดงถึง NNs ที่เหมือนกัน 3 รายการพร้อมกับเลเยอร์ที่ซ่อนอยู่หลายชั้นตามด้วยเลเยอร์ที่ซ่อนอยู่ที่ไม่แชร์หลายชั้น

ฉันไม่แน่ใจว่าจะแชร์หลายเลเยอร์ได้อย่างไรในตัวอย่าง Twitter มีเลเยอร์ที่แชร์เพียงหนึ่งเลเยอร์ (ตัวอย่างใน API เอกสาร)

คำตอบ:


10

Input xDenseDense

x = Input(shape=(n, ))
shared = Dense(32)(x)
sub1 = Dense(16)(shared)
sub2 = Dense(16)(shared)
sub3 = Dense(16)(shared)
out1 = Dense(1)(sub1)
out2 = Dense(1)(sub2)
out3 = Dense(1)(sub3)

เราสามารถกำหนดโมเดลของเราได้ในตอนนี้:

model = Model(inputs=x, outputs=[out1, out2, out3])

โดยคาดว่าจะมีสิ่งอันดับ / รายการของสามองค์ประกอบในขณะนี้หนึ่งรายการสำหรับแต่ละเอาต์พุต

คุณสามารถไปได้ไกลกว่านี้ด้วยแนวคิดเหล่านี้ สมมติว่าเราต้องการเรียนรู้ตุ้มน้ำหนักเดี่ยวสำหรับเลเยอร์บุคคล แต่ยังต้องการให้มีน้ำหนักเท่ากันสำหรับการผสมเชิงเส้นเข้าหาเลเยอร์เอาท์พุทเราสามารถทำได้โดยทำสิ่งนี้:

out = Dense(1)
out1 = out(sub1)
out2 = out(sub2)
out3 = out(sub3)

แก้ไข: การต่อข้อมูลกันเป็นสิ่งที่ตรงกันข้ามกับสิ่งที่คุณต้องการทำคือวางผลลัพธ์ (ระดับกลาง) ของส่วนต่างๆของเครือข่ายของคุณลงในเลเยอร์ใหม่ คุณต้องการแยกออกเป็นหลายส่วน


ขอบคุณมาก. เมื่อเราทำสิ่งmodel.fit([data1, data2], [labels1, labels2])นี้สิ่งนี้จะได้รับการฝึกฝน (การขยายพันธุ์ด้านหลัง) เป็นแบบจำลองใช่มั้ย
Aditya

1
ใช่มันจะเป็นเรื่องหนึ่งถ้าป้ายมีการสูญเสียต่าง ๆ ที่เกี่ยวข้องคุณจะต้องทำงานเพิ่มเติมมันไม่ใช่เรื่องง่ายใน Keras แต่ไม่เป็นไปไม่ได้ถ้าพวกเขาแบ่งปันฟังก์ชั่นการสูญเสียแบบเดียวกันโดยไม่ต้องชั่งน้ำหนักใหม่
Jan van der Vegt

สิ่งนี้จะต้องมีการฝึกอบรมรูปแบบรวมใหม่อีกครั้ง ถ้าคุณมีตุ้มน้ำหนักการฝึกอบรมสำหรับรุ่นย่อยอยู่แล้ว? มีวิธีใช้น้ำหนักเหล่านั้นในการสร้างน้ำหนักสำหรับโมเดลที่ผสานหรือไม่
shahar_m

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