Tengo problemas para comprender la documentación del módulo LSTM de PyTorch (y también RNN y GRU, que son similares). En cuanto a los resultados, dice:
Salidas: salida, (h_n, c_n)
- output (seq_len, batch, hidden_size * num_directions): tensor que contiene las características de salida (h_t) de la última capa del RNN, para cada t. Si se ha dado una antorcha.nn.utils.rnn.PackedSequence como entrada, la salida también será una secuencia empaquetada.
- h_n (num_layers * num_directions, batch, hidden_size): tensor que contiene el estado oculto para t = seq_len
- c_n (num_layers * num_directions, batch, hidden_size): tensor que contiene el estado de la celda para t = seq_len
Parece que las variables output
y h_n
dan los valores del estado oculto. ¿h_n
solo proporciona redundantemente el último paso de tiempo que ya está incluido en output
, o hay algo más que eso?
3 respuestas
Hice un diagrama. Los nombres siguen los documentos PyTorch, aunque cambié el nombre de {{X0 }} a w
.
output
comprende todos los estados ocultos en la última capa ("última" en cuanto a profundidad, no en cuanto al tiempo). (h_n, c_n)
comprende los estados ocultos después del último paso de tiempo, t = n , por lo que podría introducirlos en otro LSTM.
La dimensión del lote no está incluida.
Realmente depende del modelo que use y de cómo interpretará el modelo. La salida puede ser:
- un solo estado oculto de celda LSTM
- varios estados ocultos de celdas LSTM
- todas las salidas de estados ocultos
Salida, casi nunca se interpreta directamente. Si la entrada está codificada, debe haber una capa softmax para decodificar los resultados.
Nota: En el modelado de idiomas, los estados ocultos se utilizan para definir la probabilidad de la siguiente palabra, p (w t + 1 | w 1 , ..., w t ) = softmax (Wh t + b).
El estado de salida es el tensor de todo el estado oculto de cada paso de tiempo en el RNN (LSTM), y el estado oculto devuelto por el RNN (LSTM) es el último estado oculto del último paso de tiempo de la secuencia de entrada. Puede verificar esto recopilando todos los estados ocultos de cada paso y comparándolos con el estado de salida (siempre que no esté usando pack_padded_sequence).
Preguntas relacionadas
Preguntas vinculadas
Nuevas preguntas
deep-learning
El aprendizaje profundo es un área de aprendizaje automático cuyo objetivo es aprender funciones complejas utilizando arquitecturas de redes neuronales especiales que son "profundas" (constan de muchas capas). Esta etiqueta debe usarse para preguntas sobre la implementación de arquitecturas de aprendizaje profundo. Las preguntas generales de aprendizaje automático deben etiquetarse como "aprendizaje automático". Es útil incluir una etiqueta para la biblioteca de software relevante (por ejemplo, "keras", "tensorflow", "pytorch", "fast.ai", etc.).