Ich versuche ein bidirektionales RNN mit Aufmerksamkeitsmechanismus für die Sequenzklassifikation zu bauen. Ich habe einige Probleme, die Hilfsfunktion zu verstehen. Ich habe gesehen, dass der, der für das Training verwendet wird, die Decodereingänge benötigt, aber da ich ein einzelnes Etikett aus der ganzen Sequenz haben möchte, weiß ich nicht genau, welche Eingabe ich hier geben soll. Das ist die Struktur, die ich bisher gebaut habe:Aufmerksamkeitsmechanismus für die Sequenzklassifizierung (seq2seq tensorflow r1.1)
# Encoder LSTM cells
lstm_fw_cell = rnn.BasicLSTMCell(n_hidden)
lstm_bw_cell = rnn.BasicLSTMCell(n_hidden)
# Bidirectional RNN
outputs, states = tf.nn.bidirectional_dynamic_rnn(lstm_fw_cell,
lstm_bw_cell, inputs=x,
sequence_length=seq_len, dtype=tf.float32)
# Concatenate forward and backward outputs
encoder_outputs = tf.concat(outputs,2)
# Decoder LSTM cell
decoder_cell = rnn.BasicLSTMCell(n_hidden)
# Attention mechanism
attention_mechanism = tf.contrib.seq2seq.LuongAttention(n_hidden, encoder_outputs)
attn_cell = tf.contrib.seq2seq.AttentionWrapper(decoder_cell,
attention_mechanism, attention_size=n_hidden)
name="attention_init")
# Initial attention
attn_zero = attn_cell.zero_state(batch_size=tf.shape(x)[0], dtype=tf.float32)
init_state = attn_zero.clone(cell_state=states[0])
# Helper function
helper = tf.contrib.seq2seq.TrainingHelper(inputs = ???)
# Decoding
my_decoder = tf.contrib.seq2seq.BasicDecoder(cell=attn_cell,
helper=helper,
initial_state=init_state)
decoder_outputs, decoder_states = tf.contrib.seq2seq.dynamic_decode(my_decoder)
Meine Eingabe ist eine Folge [batch_size, sequence_length, n_features] und meine Ausgabe ist ein einzelner Vektor mit N möglichen Klassen [batch_size, n_classes].
Wissen Sie, was fehlt mir hier oder wenn seq2seq für Sequenzklassifizierung verwendet werden kann?