Veuillez signaler toute erreur.
L'un des apprentissages non supervisés, qui permet d'obtenir les mêmes données que les données d'entrée à partir de la sortie du NN. Comme le montre la figure ci-dessus, le modèle est à l'étroit et seule la couche intermédiaire est réellement utilisée. En gros, le but de ce modèle est d'extraire des caractéristiques pour l'entrée.
RNN AutoEncoder RNN AutoEncoder est modélisé comme ci-dessus et utilise le dernier état de la cellule RNN de l'encodeur. Contrairement à l'AutoEncoder de base, RNN AutoEncoder vise à extraire des fonctionnalités à partir de données séquentielles. Par conséquent, il est possible d'extraire des fonctionnalités de vidéos et de textes.
model.py
import tensorflow as tf
import tensorflow.contrib.seq2seq as seq2seq
Cette fois, la partie décodeur utilise le module seq2seq.
model.py
with tf.variable_scope('LSTM_ENCODER'):
cell_ = tf.contrib.rnn.BasicLSTMCell(args.rnn_size, reuse=tf.get_variable_scope().reuse)
encoder_outputs, encoder_final_state = tf.nn.dynamic_rnn(cell_, encoder_inputs,\
initial_state=cell_.zero_state(batch_size=args.batch_size, dtype=tf.float32),\
dtype=tf.float32)
La partie encodeur ressemble à ceci. ʻEncoder_final_state` est la partie qui correspond à l'objectif.
model.py
with tf.variable_scope('LSTM_DECODER'):
cell_ = tf.contrib.rnn.BasicLSTMCell(args.rnn_size, reuse=tf.get_variable_scope().reuse)
helper = seq2seq.TrainingHelper(decoder_input, tf.cast([args.max_time_step]*args.batch_size, tf.int32))
decoder = seq2seq.BasicDecoder(cell_, helper=helper, initial_state=encoder_final_state)
basic_decoder_out, _, _ = seq2seq.dynamic_decode(decoder= decoder)
decoder_output, _ = basic_decoder_out
La partie décodeur peut être écrite comme ceci.
model.py
with tf.variable_scope('LSTM_DECODER_LOSS'):
out_w = tf.get_variable('decoder_out_w', shape=[args.rnn_size, args.vocab_size], dtype=tf.float32, initializer=tf.random_normal_initializer)
out_b = tf.get_variable('decoder_out_b', shape=[args.vocab_size], dtype=tf.float32, initializer=tf.random_normal_initializer)
outs = []
time_step_major = tf.unstack(tf.transpose(decoder_output, [1, 0, 2]))
for i, t_out in enumerate(time_step_major):
outs.append(tf.nn.relu(tf.nn.xw_plus_b(t_out, out_w, out_b, 'dense')))
logits = tf.transpose(tf.convert_to_tensor(outs), [1, 0, 2])
self.loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(labels=tf.reshape(self.decoder_labels, [-1, args.vocab_size]), logits=tf.reshape(logits, [-1, args.vocab_size])))
la perte peut être écrite comme ci-dessus. Après cela, vous pouvez alimenter chaque variable de Session et optimiser comme d'habitude.
Cliquez ici pour le papier LSTM AE paper Autoencoder appris avec Keras