1

ビデオ シーケンスの分類にソフト アテンションを実装しようとしています。NLP には多くの実装と例があるため、このスキーマに従ってみましたが、ビデオ1については. 基本的に、Attention Model を間に挟んだ LSTM です。 ここに画像の説明を入力

1 https://blog.heuritech.com/2016/01/20/attention-mechanism/

注意層のコードは次のとおりで、正しく実装されているかどうかはわかりません。

def attention_layer(self, input, context):

    # Input is a Tensor: [batch_size, lstm_units]
    # Input (Seq_length, batch_size, lstm_units)
    # Context is a LSTMStateTuple: [batch_size, lstm_units]. Hidden_state, output = StateTuple

    hidden_state, _ = context
    weights_y = tf.get_variable("att_weights_Y", [self.lstm_units, self.lstm_units], initializer=tf.contrib.layers.xavier_initializer())
    weights_c = tf.get_variable("att_weights_c", [self.lstm_units, self.lstm_units], initializer=tf.contrib.layers.xavier_initializer())
    z_ = []

    for feat in input:
        # Equation => M  = tanh(Wc c + Wy y)
        Wcc = tf.matmul(hidden_state, weights_c)
        Wyy = tf.matmul(feat, weights_y)

        m = tf.add(Wcc, Wyy)
        m = tf.tanh(m, name='M_matrix')

        # Equation => s = softmax(m)
        s = tf.nn.softmax(m, name='softmax_att')
        z = tf.multiply(feat, s)

        z_.append(z)

    out = tf.stack(z_, axis=1)
    out = tf.reduce_sum(out, 1)
    return out, s

したがって、このレイヤーを LSTM の間 (または 2 つの LSTM の最初) に追加すると、トレーニングが非常に遅くなります。より具体的には、オプティマイザーを宣言するときに多くの時間がかかります。

optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(loss)

私の質問は次のとおりです。

  1. 実装は正しいですか?もしそうなら、適切にトレーニングするために最適化する方法はありますか?
  2. seq2seq API で動作させることができませんでした。この特定の問題に取り組むことができる Tensorflow の API はありますか?
  3. これをシーケンス分類に使用することは実際に意味がありますか?
4

0 に答える 0