- 전처리 단계
1. input 이미지와 정답데이터간의 정렬이 중요하다.
같은 순서대로 서로 짝이 맞게 매칭되어야 한다.
실제 자료구조를 그렇게 설계하고 dataloader로 데이터를 로드했을 때 실제로 input이미지와 정답데이터가 맞게 짝지어져서 신경망에 들어가는지 확인할 필요가 있다.
(나의 경우 input 이미지는 ( 1.png, 10.png, 100.png.....), 정답데이터는( 1.txt, 2.txt, 3.txt...) 형식으로 정렬이 되어 학습 중 train loss만 계속해서 줄어들고 valid loss 는 줄어들지 않고 유지되는 현상이 나타났다. 아마 일반화를 하지 못하고 정답을 하나하나 외운 것 같다.) 2.이미지파일을 읽어들일때 RGB순서나 어떤 형태의 변형이 있는지 체크해야 한다.
opencv의 경우 cv2.imread 메서드로 이미지를 읽어들이면 RGB채널이 BGR채널로 변형이 된다.이게 문제가 되는 경우 체크를 해서 수정을 해야 한다.나의 경우 matplotlib라이브러리의 image.imread 메서드로 쓰니 RGB채널순서를 유지한채로 불러올 수 있었다. ( 딱히 문제가 안 될수도 있었으나 BGR형태의 numpy파일을 신경망학습용 파일(pytorch tensor)로 변형을 하고 시각화를 하게 되면 이미지가 알아볼수 없게 변형이 되는 듯 하여 RGB형태로 이미지를 읽어들이는 방식을 채택하였다. 신경망 내부에서는 어떤 과정으로 이런 변형을 되돌리거나 변형속에서도 패턴을 찾을 수 있을 가능성도 있으나 거기까지는 실험해보지 않았다. )
3.input이미지와 정답데이터가 신경망에 들어가기 직전까지 신경망에 알맞은 형태로 들어가는지 어떤 변형은 없는지 체크하여야 한다. 나의 경우 이미지를 읽어들이고 numpy로 변형을 한 뒤 이미지의 RGB값이 이미 0~1사이 값으로 정규화되었는데 모르고 또 한번 256으로 나누어 주어서 학습을 돌렸다. 그랫더니 loss가 일정이상 안 줄어들다가 train loss 값이 nan값으로 발산해버리는 현상이 발생하였다(valid도 발산하였던듯 하다.기억이 정확친 않지만..). 이상태에서 정규화를 두번 한 걸 모르고 learningrate를 0.00000001~0.99 이상으로 조절을 반복하며 삽질을 많이 하였다.ㅠ.ㅠ - 신경망 설계 단계
1.신경망 설계단계에서 Batch Normalization 을 적용하는 것을 권장한다. 자세한 설명을 구글링을 통해서..
MSE를 loss function으로 쓸 경우 제곱으로 loss값이 표현되므로 직관적이지 않은 값이 나올수 있다. 이럴때는 MSE에 제곱근을 씌운 RMSE를 loss function으로 쓰면 직관적으로 더 실제 loss에 가까운 값을 볼수 있을 것이다. - 후처리 단계
1.후처리단계에서 loss를 뽑아내는 과정에서 나누기를 잘못하여 잘못된 loss값을 뽑아낸다든지 하는 실수가 발생하였다. 학습상태를 확인할 목적으로 전체데이터갯수로 나누어줘야 할 loss합을 배치사이즈 나눠준다든지..배치사이즈로 loss합을 나누어주어야 하는 상황에서 이미 loss값을 배치사이즈로 나누어주었는데 한번 더 나누어 실제보다 작은 loss가 표시되어 학습상태파악을 잘못하고 있다든지..하는 실수가 발생하기도..
'Development' 카테고리의 다른 글
딥러닝 시각화 도구 visdom 에러 대처법 (0) | 2021.11.04 |
---|---|
Pyinstaller 통합라이브러리 만들시 팁! (0) | 2021.09.17 |
Pyinstaller 오류 대응 1. (0) | 2021.09.09 |
pytorch_AI_layer 별 리소스검사코드. (0) | 2021.06.04 |
딥러닝 학습 시 랜덤시드 고정하는 방법.(torch 1.6.0 버전) (0) | 2021.06.04 |