質問編集履歴
1
前回の題名はTensorflow寄りだったので、変更しました。
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
AttentionモデルのDecoder Inputについて
|
test
CHANGED
@@ -2,19 +2,23 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
現在、Tensorflowを利用して深層学習について学んでおります。
|
5
|
+
現在、Tensorflowを利用して深層学習(系列変換モデル)について学んでおります。
|
6
6
|
|
7
7
|
https://www.tensorflow.org/beta/tutorials/text/image_captioning
|
8
8
|
|
9
9
|
Tensorflowチュートリアル(上記URLページ)にある、画像のキャプション生成を行なっているのですが、
|
10
10
|
|
11
|
-
Decoderのモデルのcall関数について、
|
11
|
+
Decoderのモデルのcall関数について、疑問をもったので質問させてください。
|
12
12
|
|
13
13
|
|
14
14
|
|
15
15
|
### 発生している問題・エラーメッセージ
|
16
16
|
|
17
17
|
上記ページ内ではshow, attend and tellという論文に基づいて、Attention機構を導入したCNNEncoder+RNNDecoderでキャプションを生成するというモデルになっています。
|
18
|
+
|
19
|
+
私の理解では、時刻tにおけるDecoderRNNへの入力となるのはx(t)と前時刻のRNNの出力(隠れ層の出力)であるh(t-1)であり、これにAttentionを導入した場合はh(t-1)はAttentionとの重み付き平均で表されるものだと思っていたのですが、以下のような実装でも同じ出力となるのでしょうか。
|
20
|
+
|
21
|
+
|
18
22
|
|
19
23
|
以下、チュートリアルページに記載のあったDecoderクラスです。
|
20
24
|
|
@@ -104,9 +108,9 @@
|
|
104
108
|
|
105
109
|
```
|
106
110
|
|
107
|
-
上記のcall関数
|
111
|
+
上記のcall関数内で、attentionと埋め込みを得るところ(x=self.embedding(x)のところ)まではわかるのですが、その後attentionとxをconcatしてself.gruへ入力するというところに疑問をもっています。
|
108
112
|
|
109
|
-
context_vectorはencoder_output(CNNが出力した特徴量)とdecoder_hiddenから得たattentionを表しています。また、self.gru(x)のとき、つまり、initial_stateがNoneの時
|
113
|
+
context_vectorはencoder_output(CNNが出力した特徴量)と(t-1)のdecoder_hiddenから得たattentionを表しています。また、self.gru(x)のとき、つまり、initial_stateがNoneの時、これは零ベクトルで計算されるようになっているようです。
|
110
114
|
|
111
115
|
私自身の理解ではself.gru(x, initial_state=context_vector)となるのではないかなと思っていたのですが、上記のような記述でも同じ出力が得られるのでしょうか?
|
112
116
|
|