Deep Learning study

[Pytorch] kaggle cat vs dog 학습시키기 with Resnet 본문

AI/Pytorch

[Pytorch] kaggle cat vs dog 학습시키기 with Resnet

HwaniL.choi 2018. 1. 24. 17:43
반응형

계속 검색하다가 transfer learning이 연관되어 나오는것 같아서 찾아보았다.

그중 Resnet이 보이길래 그냥 resnet을 써 보았다. 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
net = models.resnet50(pretrained = True)
num_ftrs = net.fc.in_features
net.fc = nn.Linear(num_ftrs,2)
net.cuda()
 
import torch.optim as optim
 
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr = 0.004)
 
for epoch in range(45):
    running_loss = 0.0
    acc = 0.
    correct = 0
    for i, data in enumerate(train_loader, 0):
        inputs, labels = data
        inputs, labels = Variable(inputs.cuda()), Variable(labels.cuda())
        
        optimizer.zero_grad()
        outputs = net(inputs)
        #print(outputs)
        loss = criterion(outputs, labels)
            
        loss.backward()
        optimizer.step()
    
        running_loss += loss.data[0]
        
        prediction = torch.max(outputs.data,1)[1]   # first column has actual prob.
        
        correct += prediction.eq(labels.data.view_as(prediction)).cpu().sum()
            
        if i%2000 == 1999:
            print('[%d, %5d] loss: %.6f acc : %.6f' % (epoch + 1, i+1, running_loss/2000100*correct/((i+1)*4)))
            running_loss = 0.0
            
print('Finished Training')
cs


Resnet을 모델로 사용하고, 마지막 fully connected layer부분에서 output 값을 2로 바꿔줘야 한다. 왜냐하면 우리의 output은 개, 고양이 둘중 하나로 나와야하기 때문이다. 그래서 2,3 번째 줄에 설정을 해주었다. 


나머지는 이전의 글과 똑같은 소스이다.


결과는 너무나도 놀라웠다... 


저번에는 50% 시작이였나.. 거기서 6시간을 학습시켜서 겨우 91%남짓 나왔는데.... 이번엔 첫 출발이 85%라니 ㅠㅠㅠㅠ

그리고 3번째 epoch 만에 95.5 % 를 넘었따.. 나는 이때까지 무엇을 한거지...


아직 결과는 나오지 않았다 똑같이 40 epoch로 해놨기때문에 .. 결과가 나온다면 나중에 글을 수정해야겠다.


resnet 이나 vgg 같은 것들에대해 잘은 모른다.. 다만 느낌만 가지고 있고 왜쓰는지 정도만 알고있는 느낌이다. 아마도 이미 학습된 모델을 가져와서 마지막 fc 레이어만 맞게 조정해주어 쓰는 방식인것 같다. 작동원리는 아직 잘 모른다.. 다시 열심히 검색을 하고,. 책도보고 강의도 보고 . 해야겠지 ㅠ


좀더 알아봐야겠... 지만 , 그냥 누가 자세하게 설명좀 해주면 좋겠다 ㅠㅠ


여튼 단지 4줄만 쓰면 모델이 완성되는 것 이였지만 머릿속이 백지인 나는 4줄을 써내려가는데에 오래걸렸다. 


 열심히 구글링하며 뻘짓을 한 덕분인지.. 이제 다른사람들의 코드를 꽤 알아볼 수 있을것 같다. 그리고 대부분의 사람들이 같은 형식으로 함수를 만들어서 코드를 짜던데, 나도 다음엔 그형식을 따라서 코드를 작성해 봐야지 ! 

반응형
Comments