Яке значення злиття моделі у Кераса?


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, крапка тощо ...) у сенсі продуктивності?

Відповіді:


14

Він використовується з кількох причин, в основному він використовується для об'єднання декількох мереж разом. Хорошим прикладом може бути те, де у вас є два типи введення, наприклад, теги та зображення. Ви можете побудувати мережу, яка, наприклад, має:

ЗОБРАЖЕННЯ -> Конв -> Макс. Пул -> Конв -> Макс. Пул -> Щільність

TAG -> Вбудовування -> Щільний шар

Щоб об'єднати ці мережі в одне передбачення і навчити їх разом, ви можете об'єднати ці щільні шари до остаточної класифікації.

Мережі, де у вас є кілька входів, є найбільш "очевидним" їх використанням, ось малюнок, який поєднує слова із зображеннями всередині RNN, мультимодальна частина - це об'єднання двох входів:

Мультимодальна нейронна мережа

Інший приклад - 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]

Вибачте, я не бачу сенсу в створенні окремих мереж як для навчальних екземплярів, так і для міток, хоча є можливість подати їх в єдину мережу на фазі підгонки, яка все одно справляється з цим завданням. Я можу бачити, що об'єднання - це можливість, але не його перевага перед "не злиттям".
Гендрик

Як ви годуєте їх у фазі підгонки? Вхідні дані завжди окремі, ви не можете використовувати свій шар згортання на своїх мітках, тому ці шари потрібно якось об'єднати.
Ян ван дер Вегт

У Keras model.fit()приймає як X, так і y для підгонки, і modelв цьому випадку може бути "не злитою" моделлю. Приблизно, як, наприклад, інші типи моделей у Sklearn.
Гендрік

3
Мітки можуть бути неправильно вибраним іменем з моєї сторони, скажімо, у вас є зображення та примітка до цього малюнка, і ви хочете класифікувати, якщо ця комбінація стосується котів чи ні, то у вас є два типи введення та один двійковий вихід . Щоб отримати синергію між ними, вам доведеться десь злити шари. Інший приклад, коли у вас є дві картини, одне зверху і одне знизу, яке ви повинні класифікувати разом
Ян ван дер Вегт

3
@Hendrik: "Компонентних моделей" немає, є лише одна модель. Це складний, з допомогою функції злиття шарів. Ви оцінюєте це як для будь-якої окремої моделі - тобто з метрикою проти набору даних про тестування (у прикладі зображення / слова з даними, що містять зображення, пов'язаний частковий текст та наступне слово як мітку для прогнозування). Якщо ви хочете, ви можете оглянути шари в моделі, щоб побачити, що вони роблять, - наприклад, аналіз особливостей CNN все ще може бути застосований до конволюційних шарів.
Ніл Слейтер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.