質問編集履歴

1

前回の題名はTensorflow寄りだったので、変更しました。

2019/06/21 03:16

投稿

g4evo
g4evo

スコア13

test CHANGED
@@ -1 +1 @@
1
- Tensorflow Tutorial 画像キャプションのモデルについて
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関数なのすが、attentionと埋め込みを得るところ(x=self.embedding(x)のところ)まではわかるのですが、その後attentionとxをconcatしてself.gruへ入力するというところに違和感感じています。
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