드디어 모든 빌드업이 끝났습니다. 논문 구현을 위해 컴퓨터를 사고(https://codestudycafe.tistory.com/29) GPU를 통해 학습하는 방법도 배웠습니다(https://codestudycafe.tistory.com/34). 이제 이 논문을 구현해 봅시다.
이 페이지의 목적은 해당 논문에 있는 모델을 구현하는 것입니다. 실제로 성능이 잘 나오면 좋겠지만 그것이 목적은 아니라는 거죠. 그러니 이전에 사용한 MNIST(https://codestudycafe.tistory.com/31)데이터를 그대로 사용해 봅시다.
전처리는 이 전 페이지를 그대로 따라 했다고 하고 바로 모델 구현으로 가봅시다.
하나의 이미지에서 두개의 CNN이 나옵니다. 그리고 각각의 CNN에 대해 MaxPool과 local_response_normalization를 적용합니다.
MNIST이미지가 너무 작아서 수치는 적당히 줄였습니다. 모델을 쪼개고 붙이는 것에 집중해 주세요. 그리고 GPU 역시 1개밖에 없어서 한 곳에서 학습했습니다.
레이어 2에서 3으로 가는 부분을 구현해 봅시다. 이 전 레이어를 합한 다음 다시 2개로 분리해 주었습니다.
레이어 3에서 4로 가는 부분을 구현해 봅시다. 이 전 레이어를 합하지 않기 때문에 Concatenate만 빼면 됩니다.
Conv에서 Dense로 가는 부분을 구현해 봅시다. 평평하게 편 다음 Dense를 적용해 주었습니다.
마지막 출력 부분입니다. Concate로 합하고 softmax를 넣어줍니다.
이제 모델의 입력과 출력을 알려줍니다.
이제 이 전과 똑같이 컴파일을 하고 실행시켜 줍니다.
성능은 이 전 CNN만 사용한 것보다 잘 나오는 것을 볼 수 있습니다. 하지만 여기서 중요한 것은 성능이 아닙니다. AlexNet의 논문에서는 첫 번째 CNN에서 GPU1에서 학습한 것은 색에 구애받지 않고 GPU2에서 학습한 것은 색을 위주로 학습했다고 합니다. 이 학습에서 위쪽 CNN과 아래쪽 CNN에서 어떤 차이가 있는지 확인해 봅시다.
지금 만든 모델은 총 19개의 레이어로 되어 있습니다. 이 중 2, 3번째 레이어가 논문의 첫번째 CNN에 해당합니다. 각 레이어마다 결과를 출력해 봅시다.
첫 번째 레이어의 파라미터 일부를 뽑아냈습니다.
마찬가지로 두 번째 레이어의 파라미터를 뽑아냈습니다.
뭔가 더 어두운 값이 많은 것 같은데 사실 이걸로는 잘 모르겠네요. 한번 분포를 그려봅시다.
아주 살짝 음수가 많은 것 같습니다. 하지만 유의미하진 않아 보이네요. 데이터가 작아서 그렇거나 색이 없는 데이터라서 그럴 가능성이 있어 보입니다.
AlexNet을 직접 구현하고 실행해 봤습니다. 혹시 논문에 있는 것처럼 뭔가 유의미한 관찰이 있을까 했지만 아쉽게도 그런 건 없네요. 이런 실패도 언젠간 도움이 되겠지라는 마음으로 다음에는 또 새로운 논문을 구현해 보겠습니다.
'개발 > 딥러닝' 카테고리의 다른 글
[논문 구현] U-Net: Convolutional Networks for BiomedicalImage Segmentation (0) | 2024.05.31 |
---|---|
[논문 리뷰] U-Net: Convolutional Networks for BiomedicalImage Segmentation (0) | 2024.05.29 |
1 - MNIST 모델 학습 (0) | 2024.05.19 |
1 - MNIST 데이터 가공 (2) | 2024.05.18 |
인공지능 - 환경 세팅 오류 해결 (1) | 2024.05.18 |