Comprensión del parámetro de Pytorch "batch_first"
Los amigos que han usado PyTorch probablemente sepan que para diferentes capas de red, las dimensiones de entrada son diferentes, pero la primera dimensión suele ser tamaño de lote, como la entrada de torch.nn.Linear (batch_size, in_features) y la entrada de torch.nn.nn (. tamaño_lote, C, H, W). La entrada de RNN es (seq_len, lote_size, input_size) y el tamaño de lote está en la segunda dimensión. Aunque puede cambiar el tamaño del lote y la longitud de la secuencia seq_len, solo necesita hacer que el lote_first = True.
Pero ¿por qué la entrada RNN no es por lotes primero = Verdadero de forma predeterminada? Esto es para facilitar la computación paralela. ¡Porque la API de RNN en cuDNN es el tamaño de lote bidimensional! Además, ¿por qué cuDNN hace esto? Porque lote primero significa que cuando la entrada del modelo (un tensor) se almacena en la memoria, primero se almacena la primera secuencia, luego la segunda... En el caso de SEQ_Renfeldt, la entrada del modelo se almacena en la memoria, primero almacene el primera unidad de todas las secuencias, y luego almacenar la segunda unidad... La diferencia entre las dos es la siguiente:
[Referencia] /p/32103001