work paper neural networks network how graves example celda python tensorflow lstm recurrent-neural-network

python - paper - Entrada al flujo tensor de la red LSTM



rnn tensorflow (1)

Tengo una serie de tiempo de longitud t (x0, ..., xt) cada uno de los xi es un vector de dimensión d, es decir xi = (x0i, x1i, ...., xdi). Por lo tanto, mi entrada X tiene forma [batch_size, d]

La entrada para el tensorflow LSTM debe ser de tamaño [batchSize, hidden_size]. Mi pregunta es cómo debería ingresar mis series de tiempo al LSTM. Una posible solución que pensé es tener una matriz de peso adicional, W, de tamaño [d, tamaño_cubierto] y para ingresar el LSTM con X * W + B.

¿Es correcto o debería ingresar algo más a la netwo ר k?

Gracias


Tu intuición es correcta; lo que necesita (y lo que ha descrito) es una incrustación para traducir su vector de entrada a la dimensión de la entrada de su LSTM. Hay tres formas principales que conozco para lograr eso.

  • Puede hacer esto manualmente con una matriz de peso W adicional y un vector de deriva b como lo describió.
  • Puede crear la matriz de ponderación y los vectores de sesgo de forma automática utilizando la función linear() de la biblioteca rnn_cell.py de TensorFlow . Luego pase la salida de esa capa lineal como la entrada de su LSTM cuando cree su LSTM a través de la función rnn_decoder() en la biblioteca seq2seq.py de Tensorflow o de lo contrario.
  • O podría hacer que Tensorflow creara esta incrustación y la conectara a las entradas de su LSTM automáticamente, creando la LSTM a través de la función embedding_rnn_decoder() en la línea 141 de la misma biblioteca de seq2seq. (Si rastrea a través del código para esta función sin ningún argumento opcional, verá que simplemente está creando una capa de incrustación lineal para la entrada, así como la LSTM y los engancha).

A menos que necesite acceder a los componentes individuales que está creando por algún motivo, le recomendaría la tercera opción para mantener su código en un nivel alto.