I have observed in the implementations by Pytorch and others, encoder outputs are used instead encoder   hidden states to calculate attention weights. Does the make no difference? One reason that I’ve observed  is that using LSTM without manually looping through the sequence results in the entire sequence at the output but only final hidden state. Are there other reasons for using encoder outputs instead of encoder hidden states ?