오늘도 역시 파이토치 배워봅시다
파이토치에서 기본모델을 구축하고 저장하는 방법 및 사용법 알아보죠 !
정리 먼저 읽어주시고, 그다음 코드를 따라가면서 주석부분을 보시면서 공부하면 됩니다 ! : )
정리
1. 데이터 전처리 해주기
2. 모델 만들기
3. 훈련데이터로 모델 사용하기
4. 훈련된 모델 저장하기
5. 저장된 모델을 불러와서 예측하기
출처 입력
코드
import torch
import torchvision
import torchvision.transforms as transforms # 데이터를 불러오면서 데이터 전처리 하기위한 라이브러리
from torch.utils.data import Dataset # Dataset으 우리가 튜닝을 할 때 사용
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim #그레디언트를 구할 수 있는 optimizer
### 기본 모델 구축 및 저장하기
# Load Data set
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))]) # 데이터 전처리를 위한 작업
trainset = torchvision.datasets.CIFAR10(root="./data", train=True, download=True, transform=transform) # 훈련데이터 설정
trainloader = torch.utils.data.DataLoader(trainset, batch_size=8, shuffle=True,num_workers=2) # 모델 사용하기 위한 배치사이즈 설정
testset = torchvision.datasets.CIFAR10(root="./data", train=False, download=True, transform=transform) # 테스트데이터 설정
testloader = torch.utils.data.DataLoader(testset, batch_size=8, shuffle=True, num_workers=2) # 모델 사용하기 위한 배치사이즈 설정
classes = ('plane', 'car', 'bird', 'cat', 'deer','dog','frog','horse','ship','truck')
# Build a Model
class Net(nn.Module): #nn.Module을 상속 받는다
def __init__(self): # 연산을 세팅하는 부분(딥러닝에서 사용할 연산들을 세팅하는 부분)
super(Net, self).__init__()
self.conv1 = nn.Conv2d(3,6,5)
self.pool = nn.MaxPool2d(2,2)
self.conv2 = nn.Conv2d(6,16,5)
self.fc1 = nn.Linear(16 * 5 * 5, 120)
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 10)
def forward(self,x): # 세팅된 연산의 순서를 정해주는 부분
x = self.pool(F.relu(self.conv1(x)))
x = self.pool(F.relu(self.conv2(x)))
x = x.view(-1, 16 * 5 * 5)
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
return x
net = Net()
print(net)
# Implement the model with training set
criterion = nn.CrossEntropyLoss() # 분류 문제에 쓰이는 loss 함수
optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9) # 정의해준 모델을 넣어주며, learning rate은 0.001,
for epoch in range(3): # loop over the data multiple times
running_loss = 0.0
for i, data in enumerate(trainloader,0):
inputs, labels = data # get the inputs; data is a list of [inputs,labels]
optimizer.zero_grad() # zero the parameter gradient
outputs = net(inputs) # forward + backward + optimize
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
running_loss += loss.itme() # print statics
if i % 2000 == 1999:
print('[%d, %5d] loss : %.3f' %(epoch+1,i+1,running_loss/2000))
running_loss = 0.0
print('Finish Training')
# Save the trained Model
path = "./cifar_net.pth"
torch.save(net.state_dict(),path)
# Load the pre-trained Model
net = Net()
net.load_state_dict(torch.load(path))
# Predict Model
correct = 0
total = 0
with torch.no_grad():
for data in testloader:
images, labels = data
outputs = net(images)
_, predicted = torch.max(outputs.data,1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
print("Accuracy of the network on the 10000 test images : %d"%(100*correct/total))
'Python_파이썬' 카테고리의 다른 글
파이썬 Python : 초간단 인증 프로그램 만들어 보자(서버 불필요) (0) | 2020.10.22 |
---|---|
파이썬 AI [입문] Pytorch : 파이토치 데이터 불러오기 (0) | 2020.10.16 |
파이썬 딥러닝 인공지능 Pytorch : 파이썬 내에서 파이토치(Pytorch) 설치법 (아나콘다 설치할 필요X) (0) | 2020.10.13 |
파이썬 Python : Django 웹 프로그래밍 설치 및 서버 구축하기 (0) | 2020.09.24 |
파이썬 Python[활용] : 스크린샷 만드는 프로그램을 만들어 보자 (0) | 2020.09.06 |