본문 바로가기

dev_AI_framework

cnn_layer 구현 및 수정

발생 문제들 해결 과정

CONV2D 역전파 부재

  • 초기에 run_graph_backward에 CONV2D 케이스가 없어서 conv_W/입력 쪽 그라디언트가 계산되지 않았음 → 합성곱은 동결된 채 FC만 학습 → 표현력이 부족해 BCE가 0.69 부근에 머뭄.
  • 수정 후: launch_conv2d_backward_input_nhwc, launch_conv2d_backward_weight_nhwc 호출 추가 → conv_W/input에 grad 생김(로그로 확인).

 

Bias ADD 브로드캐스트 불일치

  • 앞서 [ADD] unsupported shape: input(8,64) + param(1,8) 경고가 계속 떴음. 이는 합성곱 출력(해석상 rows=채널=8, cols=H*W=64)에 대해 bias를 (1,8)로 넣었을 때 어느 축으로 브로드캐스트할지 엔진이 모호했던 것.
  • 수정 후: ADD에서 rowwise(col=H*W) vs colwise(rows=채널) 두 모드를 명확히 분기하고, conv-bias는 채널(colwise) 로 처리 + 역전파도 colwise 경로 구현.

 

4D→2D 형상 매핑 불일치

  • Conv/Flatten/Activation의 to_e_matrix()가 내부 엔진의 (rows, cols) 해석과 어긋나 있을 때, 덧셈/활성화/손실에서 잘못된 크기로 연산되어 학습 신호가 약화/왜곡.
  • 수정 후:
    • Conv 출력은 (rows=Cout, cols=Hout*Wout)로 일관.
    • Flatten은 배치 외에 샘플당 rows=1, cols=features로 고정.
    • Activation은 2D 전제 유지(필요 시 Flatten 앞/뒤 위치 점검).
    • stride/padding을 extra_params로 정확히 전달하여 forward conv와 일치.

 

라벨(y_true) shape와 LOSS wiring

  • evaluate()/fit() 때 y_true의 (rows, cols) 미설정/불일치 시, 손실이나 dL/dY가 틀어진 텐서 크기로 계산.
  • 수정 후: Sequential._ensure_label_shape()에서 모델 최종 출력 shape에 맞춰 y_true shape를 보정.

 

ADD rowwise 커널/그라드 구현 미완성

  • rowwise/colwise에 맞는 forward 커널(launch_add_bias_rowwise/colwise)reduce 기반 dB 계산 보강으로 안정화.