การรวมตัวแบบใน Keras มีความสำคัญอย่างไร


10

ฉันได้เรียนรู้ว่า Keras มีฟังก์ชั่น "ผสาน" สองรุ่นตามต่อไปนี้:

from keras.layers import Merge

left_branch = Sequential()
left_branch.add(Dense(32, input_dim=784))

right_branch = Sequential()
right_branch.add(Dense(32, input_dim=784))

merged = Merge([left_branch, right_branch], mode='concat')

ประเด็นในการผสาน NN คืออะไร, สถานการณ์ใดมีประโยชน์? มันเป็นแบบจำลองวงดนตรีหรือไม่? อะไรคือความแตกต่างระหว่าง "โหมด" (concat, avg, dot ฯลฯ ... ) ในแง่ของประสิทธิภาพ?

คำตอบ:


14

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

IMAGE -> Conv -> Max Pooling -> Conv -> Max Pooling -> หนาแน่น

TAG -> การฝัง -> เลเยอร์หนาแน่น

หากต้องการรวมเครือข่ายเหล่านี้เข้าด้วยกันเป็นหนึ่งคำทำนายและฝึกฝนพวกมันเข้าด้วยกันคุณสามารถรวมเลเยอร์หนาแน่นเหล่านี้ก่อนการจำแนกขั้นสุดท้าย

เครือข่ายที่คุณมีอินพุตหลายอินพุทเป็นการใช้ที่ 'ชัดเจนที่สุด' นี่คือรูปภาพที่รวมคำกับรูปภาพภายใน RNN ส่วน Multimodal เป็นที่รวมอินพุตทั้งสองเข้าด้วยกัน:

เครือข่ายประสาทหลายรูปแบบ

อีกตัวอย่างหนึ่งคือเลเยอร์ Inception ของ Google ซึ่งคุณมีความมั่นใจที่แตกต่างกันซึ่งจะถูกรวมเข้าด้วยกันก่อนที่จะเข้าสู่เลเยอร์ถัดไป

หากต้องการป้อนหลายอินพุตไปยัง Keras คุณสามารถส่งรายการอาร์เรย์ได้ ในตัวอย่างคำ / รูปภาพคุณจะมีสองรายการ:

x_input_image = [image1, image2, image3]
x_input_word = ['Feline', 'Dog', 'TV']
y_output = [1, 0, 0]

จากนั้นคุณสามารถใส่ดังนี้:

model.fit(x=[x_input_image, x_input_word], y=y_output]

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

คุณจะให้อาหารพวกเขาในช่วงที่เหมาะสมได้อย่างไร อินพุตแยกจากกันเสมอคุณไม่สามารถใช้เลเยอร์ convolution ของคุณบนเลเบลดังนั้นเลเยอร์เหล่านี้จำเป็นต้องรวมเข้าด้วยกัน
Jan van der Vegt

ใน Keras model.fit()ยอมรับทั้ง X และ y สำหรับการปรับและmodelในกรณีนี้สามารถเป็นแบบ "ไม่ผสาน" ได้เช่นกัน ยกตัวอย่างเช่นรุ่นอื่น ๆ ใน Sklearn
Hendrik

3
ป้ายกำกับอาจเป็นชื่อที่เลือกไม่ดีจากด้านข้างของฉันสมมติว่าคุณมีรูปภาพและคำอธิบายประกอบที่มีรูปภาพนั้นและคุณต้องการจำแนกว่าชุดนั้นเกี่ยวกับแมวหรือไม่จากนั้นคุณมีอินพุตสองประเภทและเอาต์พุตไบนารีหนึ่งรายการ . ในการรับพลังระหว่างพวกเขาคุณจะต้องรวมเลเยอร์บางแห่ง อีกตัวอย่างหนึ่งคือที่ที่คุณมีสองภาพหนึ่งภาพจากด้านบนและอีกภาพหนึ่งจากด้านล่างที่คุณต้องจัดหมวดหมู่ด้วยกัน
Jan van der Vegt

3
@Hendrik: ไม่มี "โมเดลส่วนประกอบ" มีเพียงหนึ่งโมเดล มันซับซ้อนอย่างหนึ่งที่เปิดใช้งานโดยคุณสมบัติการรวมเลเยอร์ คุณประเมินผลเช่นเดียวกับแบบจำลองเดียว - เช่นกับตัวชี้วัดเทียบกับชุดข้อมูลการทดสอบที่ระงับ (ในตัวอย่างภาพ / คำที่มีข้อมูลที่ประกอบด้วยภาพประกอบด้วยข้อความบางส่วนที่เกี่ยวข้องและคำถัดไปเป็นป้ายกำกับที่จะคาดการณ์) หากคุณต้องการคุณสามารถตรวจสอบเลเยอร์ภายในโมเดลเพื่อดูว่าพวกเขากำลังทำอะไรอยู่เช่นการวิเคราะห์คุณสมบัติของ CNN ยังคงสามารถนำไปใช้กับเลเยอร์ convolutional ได้
Neil Slater
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.