• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    해결됨

이미지분류-합성곱신경망(CNN) 피쳐맵 질문입니다.

23.06.24 23:07 작성 23.06.24 23:10 수정 조회수 411

1

안녕하세요. 강의 잘 듣고있습니다.

질문은 여기서 16*5*5가 5*5피쳐맵 16개라는데

5*5피쳐맵이 갑자기 어디서 나온건가요?

앞의 conv2d에서의 필터크기가 5*5여서 5*5피쳐맵이 생성된건가요?

답변 1

답변을 작성해보세요.

0

안녕하세요.

 

좋은 질문입니다 :)

fc1 이 전 풀링 레이어 pool2까지 거친 피쳐맵의 크기가 16x5x5 입니다. 즉, 5x5 피쳐맵이 16개 있다는 의미이고 이 것을 일렬로 폈기 때문에 fc1의 입력 노드가 16x5x5개 됩니다! 즉, 모델을 구축하기 위해서 마지막 피쳐맵의 크기를 미리 알고 계셔야 합니다.

 

감사합니다.

답변감사합니다! 그럼 선생님께서는 아래와 같이 피쳐맵의 크기를 계산하는 공식을 매번 적용하시면서 코드를 작성하셨던 걸까요?? 공식을 일일히 적용하지 않고 계산하는 함수?또는 코드가 있는지도 궁금합니다!

OutputHeight=OH=(H+2P−FH)S+1O

OutputWeight=OW=(W+2P−FW)S+1

공식 사용하셔도 됩니다! 다만 모델 구조와 이미지 크기에 따라 공식의 분수 계산 부분에서 나누어 떨어지지 않는 경우가 여러 번 나오게 되면 최종 값이 맞지 않아 오류가 발생할 가능성이 있습니다. 그래서 이 부분을 신경 쓰고 싶지 않으면 일렬로 피는 대신에 각 채널의 피쳐맵 평균을 사용하는 global average pooling도 많이 사용합니다. 즉, 이 경우에는 어떠한 이미지 사이즈가 들어와도 무조건 fc1의 입력 노드가 직전 채널 수가 됩니다!! (즉, fc1=nn.Linear(16, 120))

와 꿀팁 감사합니다!!!! 좋은 밤 되세요 :)