nn.Linear(1024, 10) 관련 질문드립니다.
안녕하세요! 수업중 궁금한 부분이 있어 문의 드립니다.
self.encoder = nn.Sequential(
nn.Conv2d(1, k, 3, stride=2), # 흑백 이미지로 체널이 1개, 나머지는 임의로 설정
nn.ReLU(),
nn.Conv2d(k, 2*k, 3, stride=2),
nn.ReLU(),
nn.Conv2d(2*k, 4*k, 3, stride=1),
nn.ReLU(),
Flatten(),
nn.Linear(1024, 10),
nn.ReLU()
nn.Linear(1024, 10) 이 부분에서, MNIST의 경우 미리 계산하면 1024가 나온다고 말씀 주셨는데요, 어떻게 계산해야 하는건지 알 수 있을까요?
또한, 이 수치를 코드 작성자가 꼭 계산해서 넣어줘야 하는지도 궁금합니다! 크기(1024)를 코드로 출력해서 확인해 보는 방법이나, 저 부분에 1024 크기가 계산되어 들어가도록 코드를 작성할 수도 있을까요?
Answer 1
0
안녕하세요.
좋은 질문입니다 :)
우리가 각 conv 레이어 당 출력 피쳐맵의 크기를 계산할 수 있기 때문에 쭉 계산해보시면 1024라는 값을 얻으실 수 있습니다. 그런데 당연히 하나하나 계산하실 필요는 없고 코딩하실 때에서 마지막 linear를 지우시고 size를 출력해보시면 1024를 얻게 되고 그 숫자를 linear에 넣어주시면 됩니다.
conv레이어 마지막에서 나온 피쳐맵을 펴서 fc로 보내는 세팅에서는 그 값을 작성자가 미리 정해주셔야 합니다. 추가로 데이터 전처리에서 resize를 적용하여 동일한 이미지 크기가 처리 되도록 한다면 한 번 세팅한 값은 이미지 크기에 따라 바뀌지 않기 때문에 그대로 사용하실 수 있구요. 또 다른 방법으로는 flatten 대신 global average pooling을 사용하는 방법이 있습니다. gap는 각 채널당 평균값을 계산하는 방법이라서 이 문제에 경우 이미지 크기에 관계없이 항상 4*k(마지막 conv레이어의 채널 수)의 노드 값을 얻으실 수 있습니다.
감사합니다.
수업자료 제공 부탁드립니다.
0
95
2
코드가 어디에 있는지 모르겠습니다.
0
93
2
논문 구현
0
184
2
overfitting이 나는 이유가 궁금합니다.
1
169
2
분류 성능이 잘 안 나오는 이유
0
217
1
AutoEncoder 차원 질문
1
250
2
사전 학습 모델에서의 layer 변경에 대한 질문
1
218
1
7강 폴더 만들
0
259
1
4-3강 cross-validation에서의 best model 선정 기준
0
447
1
regression 문제에 대한 결과 시각화
0
213
1
Loss function 관련하여 질문드립니다.
0
954
1
early stopping 코드 문의
0
325
1
예측 그래프
0
353
1
데이터 불균형
1
364
1
8강 전이 학습 질문
0
395
2
data의 gpu처리 질문
0
240
1
학습과 평가시 Loss 함수가 다른 이유
0
249
1
전처리 관련해서 질문 있습니다.
0
224
1
데이터 엔지니어의 역량을 기르려면 어떻게 해야할까요?
0
933
2
역전파 내용 중 미분 관련 질문 드립니다
1
282
1
8강 전이학습에서 kernel size 관련 질문 드립니다.
1
956
1
이미지분류-합성곱신경망(CNN) 피쳐맵 질문입니다.
1
585
1
14강 데이터 불균형 RandomRotation
1
481
1
3장 데이터 불러오기에서 LinearTensor를 정의하는 이유가 궁금합니다.
1
324
1

