Forward 순서는 복사, 가중합, Activation입니다
먼저 현재 net.input을 layer output으로 복사합니다. 다음으로 l.index가 가리키는 이전 layer 출력을 shortcut_cpu로 섞고, 마지막에 activation을 적용합니다.
1
2
3
4
5
6
7
| copy_cpu(l.outputs*l.batch, net.input, 1, l.output, 1);
shortcut_cpu(
l.batch,
l.w, l.h, l.c, net.layers[l.index].output,
l.out_w, l.out_h, l.out_c,
l.alpha, l.beta, l.output);
activate_array(l.output, l.outputs*l.batch, l.activation);
|
따라서 비교 테스트에서 단순 합과 다른 결과가 나왔다면 먼저 alpha, beta와 activation 설정을 봐야 합니다. Activation을 각 branch에 따로 적용한 뒤 더하는 구현도 이 코드와 같지 않습니다.
make_shortcut_layer는 현재 출력 shape w,h,c와 연결 대상 shape w2,h2,c2를 모두 저장합니다. 두 shape가 다를 수 있는 필드는 마련돼 있지만, 실제 매핑 규칙은 이 원문에 포함되지 않은 shortcut_cpu가 결정합니다.