Recherche…


Création d'un LSTM bidirectionnel

import tensorflow as tf

dims, layers = 32, 2
# Creating the forward and backwards cells
lstm_fw_cell = tf.nn.rnn_cell.BasicLSTMCell(dims, forget_bias=1.0)
lstm_bw_cell = tf.nn.rnn_cell.BasicLSTMCell(dims, forget_bias=1.0)
# Pass lstm_fw_cell / lstm_bw_cell directly to tf.nn.bidrectional_rnn
# if only a single layer is needed
lstm_fw_multicell = tf.nn.rnn_cell.MultiRNNCell([lstm_fw_cell]*layers)
lstm_bw_multicell = tf.nn.rnn_cell.MultiRNNCell([lstm_bw_cell]*layers)

# tf.nn.bidirectional_rnn takes a list of tensors with shape 
# [batch_size x cell_fw.state_size], so separate the input into discrete
# timesteps.
_X = tf.unpack(state_below, axis=1)
# state_fw and state_bw are the final states of the forwards/backwards LSTM, respectively
outputs, state_fw, state_bw = tf.nn.bidirectional_rnn(lstm_fw_multicell, lstm_bw_multicell, _X, dtype='float32')

Paramètres

  • state_below est un tenseur 3D dont les dimensions sont les suivantes: [ batch_size , maximum sequence index, dims ]. Cela provient d'une opération précédente, telle que la recherche d'un mot à intégrer.
  • dims est le nombre d'unités cachées.
  • layers peuvent être ajustées au-dessus de 1 pour créer un réseau LSTM empilé .

Remarques

  • tf.unpack peut ne pas être capable de déterminer la taille d'un axe donné (utilisez l'argument nums si tel est le cas).
  • Il peut être utile d'ajouter une multiplication de pondération + biais supplémentaire sous le LSTM (par exemple, tf.matmul(state_below, U) + b .


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow