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 derivab
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ónrnn_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.