質問
レイヤー結合の際にmultiplyが用いられることがあるようだが、具体的にどんな用途で使われるのかイメージがつかない。
レイヤー結合方法
まず、Kerasにはレイヤーを結合する際の方法が、add/multiply/concatenate/maximum/averagedの5種あるらしい。(参考サイト)
concatenateはよく使うので、直感的でわかりやすい(Unetとか)
maximum/averagedも、使ったことはないが、CNNのプーリング層などをイメージすれば、だいたいどういう用途で使われているかイメージできる。
本題
ConditionalGANで下記のようなコードを見ました。
Python
1# 画像とラベルの入力レイヤ 2img = Input(shape=self.img_shape) 3label = Input(shape=(1,), dtype='int32') 4 5# ラベルの分散表現 6label_embedding = Flatten()(Embedding(self.num_classes,np.prod(self.img_shape))(label)) 7# 画像平滑化 8flat_img = Flatten()(img) 9 10## 不明な箇所 11model_input = multiply([flat_img, label_embedding])
上記コードの
Python
1model_input = multiply([flat_img, label_embedding])
の部分は、何を意図しているのでしょうか。
質問1
イメージとしては、「ラベルの分散表現」と「画像」を同時にネットワークに入力するため、掛け合わせて、「ラベルの分散表現と画像を同時に表すベクトル」を生成しているように見えますが、解釈は正しいでしょうか。
質問2
また、multiplyの逆伝播の際は、どのような処理が行われるのでしょうか。通常のネットワークの層のように、更新される重みなどがないと思うので、素通りでしょうか。
質問3
もし分かれば、こちらも教えてほしいのですが、concatenateはよく使いますが、その他のadd/multiply/maximum/averagedなどをネットワークの構造としてあまりくみこんだところをみたことがありませんが、「それぞれこういうところで使われてたりする」という具体例などありましたら教えてください。
あなたの回答
tips
プレビュー