2023.12.16 & 12.17 주말 TIL
주말에도 계속 공부를 하긴 했는데 주말 TIL은 오랜만에 쓰는 것 같다. 한동안 TIL에 살짝 소홀했는데 이제 다시 제대로 적을거다! TIL 말고 배운 내용들에 대한 블로그도 바로바로 작성해서 올릴 계획이다. 시간날 때 해야지하고 바로 포스팅을 안하니까... 하기 쉽지 않은 것 같다ㅠㅠ
주말동안 밀린 이번주 강의를 들었다. 코드를 구현하는 강의가 많아서 따라하고 이해하느라 시간이 좀 더 걸린것 같다. CNN을 구현할 때 torch를 사용하지 않고 numpy만으로 하나하나 구현해 본 적은 없었는데 이번 기회에 어떤 식으로 구현되는지 자세히 알 수 있어서 많이 배웠다.
📝 배운 내용
data normalization 이유
- data 값의 범위가 크면 weight가 잘 수렴되지 않고 output도 큰 숫자로 나오게 되는 문제가 있다
- 분산이 너무 크기 때문에 0~255의 값을 0~1사이의 값으로 변환해줘야한다
LeNet5를 사용한 mnist 분류 (torch)
- 학습할 때 lr도 조건에 따라 바꾸는 scheduler를 사용한다
- loss를 계산하는 CrossEntropyLoss()의 경우 만약 한번에 학습하는 이미지가 여러개라면 그 여러개의 loss의 평균값을 리턴한다. (option을 다르게 할 수도 있다)
- img와 gt값을 device로 (내 경우는 cpu)로 옮겨주는 작업을 한다
- batch마다 forward, backward, optimizer를 수행하고 epoch마다 scheduler를 수행한다
- train을 할 때에는 fc 결과로 나온 label들 값을 모두 사용하고 그 외의 eval, test의 경우에는 argmax를 수행하여 하나의 값만 사용한다
IM2COL & GEMM
- n차원의 data을 2차원의 matrix data로 변환하여 연산의 효율성을 높이는 방법
- IM2COL은 2차원으로 변환하는 것을 의미하고 GEMM은 계산하는 과정을 의미
- 이 방법을 사용하는 경우 일반적인 conv 연산을 수행하는 것보다 10배 이상 빠르다