Kerasでモデルをマージすることの意味は何ですか?


10

Kerasには次のように2つのモデルを「マージ」する機能があることを知りました。

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')

mergint NNのポイントは何ですか?どのような状況で役立ちますか?一種のアンサンブルモデリングですか?パフォーマンスの意味でのいくつかの「モード」(連結、平均、ドットなど...)の違いは何ですか?

回答:


14

これはいくつかの理由で使用されます。基本的には、複数のネットワークを結合するために使用されます。良い例は、タグと画像など、2種類の入力がある場合です。たとえば、次のようなネットワークを構築できます。

画像->変換->最大プーリング->変換->最大プーリング->密

タグ->埋め込み->高密度レイヤー

これらのネットワークを1つの予測に組み合わせ、それらを一緒にトレーニングするには、最終的な分類の前にこれらの高密度レイヤーをマージできます。

複数の入力があるネットワークは、それらの最も「明白な」使用法です。これは、RNN内で単語と画像を組み合わせる画像です。マルチモーダルパーツは、2つの入力がマージされる場所です。

マルチモーダルニューラルネットワーク

別の例は、次のレイヤーに到達する前に追加されるさまざまな畳み込みがあるGoogleのInceptionレイヤーです。

Kerasに複数の入力を供給するために、配列のリストを渡すことができます。word / imageの例では、2つのリストがあります。

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

フィッティング段階でそれらをどのように養いますか?入力は常に分離されており、ラベルに畳み込みレイヤーを使用できないため、これらのレイヤーを何らかの方法でマージする必要があります。
Jan van der Vegt

Kerasではmodel.fit()、フィッティングにXとyの両方を受け入れmodel、この場合、「非マージ」モデルにすることもできます。たとえば、Sklearnの他のモデルタイプとよく似ています。
Hendrik

3
ラベルは私の側から不適切に選択された名前かもしれません、あなたが写真とその写真の注釈を持っていて、その組み合わせが猫に関するものかどうかを分類したいとしたら、2つのタイプの入力と1つのバイナリ出力があります。 。それらの間の相乗効果を得るには、どこかでレイヤーをマージする必要があります。あなたは二つの絵、トップから1とあなたが一緒に分類しなければならないことを、下から1持っているもう一つの例はある
Vegtデア・ヤンファン

3
@ヘンドリック:「コンポーネントモデル」はなく、モデルは1つだけです。これは複雑なもので、レイヤーのマージ機能によって有効になります。単一のモデルの場合と同じように評価します。つまり、ホールドアウトテストデータセットに対するメトリックを使用します(画像、関連する部分的なテキスト、および予測するラベルとしての次の単語を含むデータを含む画像/単語の例)。必要に応じて、モデル内のレイヤーを検査して、それらが何を行っているかを確認できます。たとえば、CNN機能の分析を畳み込みレイヤーに適用できます。
Neil Slater
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.