Hey @morgankohler
As far as I know, bi-directional LSTMs have different modes of concatenation for the hidden states. If you achieve 2*hidden_size that means you are stacking the vectors one on top of the other. It is how the other bi/uni directional LSTM stacked above will receive their inputs.
Having said that, I feel the way you have organised the code is good to go.