【계속】 기계 학습 초보자가 Pytorch 튜토리얼을 개조해 CIFAR10의 정밀도를 준다

-1 (6월 11일 추기) 코멘트 받은 것



@t-ae씨의 지적에 의해 극히 당연한 문제가 발각되었습니다.
고칠 것이라고도 생각했지만, 받은 조언은 후의 장에서 수정하는데 도움이 되도록(듯이) 해,
반면 교사로서 그대로 남겨두려고 생각합니다.

a: "2"에서 말했듯이 피라미드형으로 늘렸지만 활성화 함수가 붙어 있지 않다



→ 이것은 선형 변환이 되어 버리기 때문에, 층을 늘리는 메리트가 전혀 없어진다.

b : nn.Conv2d 인수에 0 패딩이 있음



→ 수동으로하는 것은 매우보기 어렵기 때문에 꼭 이것을 사용합시다.

0 소개



2%의 정확도가 올랐습니다!
89% 도달입니다!



라는 기쁨의 외침에서 시작. 계속됩니다.
지난번에는 다음 기사에서 CIFAR10에서 87%를 달성했습니다.
htps : // 코 m/다이키 cㄹ테/있어 ms/020f12778200460f73f4

(해보면 85%부터 앞이 좀처럼 오르지 않아서···)

ResNet은 사용하지 않고 Pytorch 튜토리얼의 개조로 90%의 달성이 목표입니다.

크게 편집한 개소는 2개소입니다.

1 dropout 레이어를 지웠다.



과학을 일으키는 것을 알 수 있습니다. 그래프 보면.
다만, 조사해 보면, Batchnorm와 dropout는 병용하면 추론시에 그다지 좋은 영향을 미치지 않는 것 같습니다.
<참고가 되는 논문>
htps : // 아 rぃ v. rg/아bs/1801.05134

그래서 일단 Dropout 레이어를 지우면

굉장히 학습 빠르다!



이것은 모두 실험이 어색하다 ...라고하는 것과 무엇보다

빠르지만 정확도의 최대 값은 변하지 않습니다.

그래서 지워 보았습니다.

2 Pyramid형으로 필터를 늘린다



오히려,
입력 레이어(필터:3)
conv(필터:64)

라는데 무리를 느끼고 있었다. 그렇게 갑자기 정보량을 늘려갈 수 있을까.

라고 하는 곳에서 「MaxPooling으로 필터를 2배로 한다」라고 하는 수법보다, 「조금씩 필터를 증가시켜 가는」 쪽이 좋다고 소문으로 들었습니다.
어떻게 하는 것이 좋은지 몰랐지만, 1*1 conv층에서 1층째까지 조금씩 필터를 증가시켜 나가도록 해 보았습니다.

입력층(3층)
1×1 conv(필터:6)
1×1 conv(필터:12)
1×1 conv(필터:24)
1×1 conv(필터:48)
3×3 conv(필터:64)

로 보았습니다.

결론



짧습니다만, dropout 없이도 성능이 변하지 않는다는데 놀라움을 기억해, 기사로 해 버렸습니다.
다음은 90% 달성했을 때 주려고 합니다.

출처



파라미터 수


            Conv2d-1            [-1, 6, 32, 32]              24
            Conv2d-2           [-1, 12, 32, 32]              84
            Conv2d-3           [-1, 24, 32, 32]             312
       BatchNorm2d-4           [-1, 24, 32, 32]              48
            Conv2d-5           [-1, 48, 32, 32]           1,200
       BatchNorm2d-6           [-1, 48, 32, 32]              96
     ConstantPad2d-7           [-1, 48, 34, 34]               0
            Conv2d-8           [-1, 64, 32, 32]          27,712
       BatchNorm2d-9           [-1, 64, 32, 32]             128
    ConstantPad2d-10           [-1, 64, 34, 34]               0
           Conv2d-11           [-1, 64, 32, 32]          36,928
    ConstantPad2d-12           [-1, 64, 34, 34]               0
           Conv2d-13           [-1, 64, 32, 32]          36,928
        MaxPool2d-14           [-1, 64, 16, 16]               0
    ConstantPad2d-15           [-1, 64, 18, 18]               0
           Conv2d-16          [-1, 128, 16, 16]          73,856
      BatchNorm2d-17          [-1, 128, 16, 16]             256
    ConstantPad2d-18          [-1, 128, 18, 18]               0
           Conv2d-19          [-1, 128, 16, 16]         147,584
    ConstantPad2d-20          [-1, 128, 18, 18]               0
           Conv2d-21          [-1, 128, 16, 16]         147,584
        MaxPool2d-22            [-1, 128, 8, 8]               0
    ConstantPad2d-23          [-1, 128, 10, 10]               0
           Conv2d-24            [-1, 256, 8, 8]         295,168
      BatchNorm2d-25            [-1, 256, 8, 8]             512
    ConstantPad2d-26          [-1, 256, 10, 10]               0
           Conv2d-27            [-1, 256, 8, 8]         590,080
    ConstantPad2d-28          [-1, 256, 10, 10]               0
           Conv2d-29            [-1, 256, 8, 8]         590,080
        MaxPool2d-30            [-1, 256, 4, 4]               0
      BatchNorm2d-31            [-1, 256, 4, 4]             512
           Conv2d-32            [-1, 100, 4, 4]          25,700
           Conv2d-33             [-1, 10, 1, 1]          16,010
              Net-34                   [-1, 10]               0
=================================================================
Total params: 1,990,802
Trainable params: 1,990,802
Non-trainable params: 0
-----------------------------------------------------------------
Input size (MB): 0.01
Forward/backward pass size (MB): 7.86
Params size (MB): 7.59
Estimated Total Size (MB): 15.47
-----------------------------------------------------------------

좋은 웹페이지 즐겨찾기