Darknet LSTM 구현이 길어 보이는 이유는 forget, input, candidate, output 네 gate마다 이전 hidden state용 Connected Layer와 현재 input용 Connected Layer를 하나씩 둬 총 8개를 호출하고, 같은 buffer 포인터를 time step마다 이동하기 때문이다. 수식보다 먼저 이 두 축을 분리하면 forward와 backward의 대응이 보인다.
이 코드는 Connected Layer의 output, delta가 steps 길이로 연속 할당되고, LSTM의 state buffer가 준비됐다는 전제의 내부 구현이다. 생성, 할당 코드가 빠져 있으므로 독립 실행 예제가 아니다.