def attention(inputs, size, scope):
with tf.variable_scope(scope or 'attention') as scope:
attention_context_vector = tf.get_variable(name='attention_context_vector',
shape=[size],
regularizer=layers.l2_regularizer(scale=L2_REG),
dtype=tf.float32)
input_projection = layers.fully_connected(inputs, size,
activation_fn=tf.tanh,
weights_regularizer=layers.l2_regularizer(scale=L2_REG))
vector_attn = tf.reduce_sum(tf.multiply(input_projection, attention_context_vector), axis=2, keep_dims=True)
attention_weights = tf.nn.softmax(vector_attn, dim=1)
weighted_projection = tf.multiply(inputs, attention_weights)
outputs = tf.reduce_sum(weighted_projection, axis=1)
return outputs
は、コードのこの作品は、あなたが注意がどのように動作するかを理解するのに役立つことを願って。 私はあなたのエンコーダ・デコーダモデルと異なるLSTM-注意モデルであり、私のドキュメント分類の仕事でこの関数を使用します。
最初の回答にお祝いを申し上げます。これは調査を示しており、非常に整形済みです! – trincot
クールな答え、コードリソースを指摘してくれてありがとう。 –
Tが入力の数が可変であることを考えると、私はまだ少し混乱しています。あなたが提供したペーパーと実装を見てから(そのおかげですばらしい答え!)、解決策は単純に時間ステップTの数の上限を固定するように思えます。アルファを計算するには標準的なニューラルネットワーク層変換を必要とする値は、その変換から出力する固定数のアルファ値を決定する必要があります。私はこの点について確かな確信を得るのが大好きです。この論文などから推論することは本当に困難でした。 –