Python_파이썬
파이썬 AI [입문] Pytorch : 파이토치 데이터 불러오기
Leon_Kor
2020. 10. 16. 18:56
오늘은 파이토치를 이용하여 데이터를 불러오기,
class를 이용하여 커스터마이징 하기 등등을 배워 볼 예정입니다.
밑에 코드 및 주석으로 자세하게 설명 및 부가 설명 적어 놓았습니다 !
중간에 이해가 안가거나 헷갈리는것이 있다면 댓글 혹은 쪽지나 이메일 부탁드려요 : )
파이토치 제공 데이터 사용
import torch
import torchvision
import torchvision.transforms as tr # 데이터를 불러오면서 데이터 전처리 하기위한 라이브러리
from torch.utils.data import DataLoader, Dataset
# DataLoader는 배치사이즈형태를 만들어 딥러닝 학습을 할 때 이용할 수 있는 형태 만드는것,
# Dataset으 우리가 튜닝을 할 때 사용
import numpy as np
## 파이토치 제공 데이터 사용
# 들어오는 데이터 전처리 관련 정의
transf = tr.Compose([tr.Resize(8),tr.ToTensor()]) # 파이토치 사이트에 여러가지 전처리를 위한 명령어들이 있다.
# 위 코드 tr.Resize(8)은 8 by 8로 사이즈 조정, tr.ToTensor()은 텐서 데이터로 변환
# 파이토치 제공 데이터 사용
trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transf) # 훈련데이터 세트
testset = torchvision.datasets.CIFAR10(root='./data', train=False, download=True, transform=transf) # 테스트데이터 세트
# 위 코드 현재 실행되는 파일 위치에 data폴더 생성후 그 안에 파일 다운로드
# 주의 : numpy나 list를 transform에 넣어주면 오류발생, PIL이미지 형태여야지 가능
print(trainset[0][0].size()) # 훈련데이터의 첫번째 데이터 사이즈 출력.
# 파이토치에서 [배치사이즈 채널수 이미지 사이즈] 순으로 나타내진다. ex) torch.size([3, 8, 8]) => 채널 3개의 8by8짜리 이미지
# 다운받은 데이터를 배치 형태로 만들기
trainloader = DataLoader(trainset, batch_size=50, shuffle=True, num_workers=2)
testloader = DataLoader(testset, batch_size=50, shuffle=True, num_workers=2)
print(len(trainloader)) # trainloader 길이 출력
# --------------------------------------여기까지 데이터 불러오기 및 전처리 작업
같은 클래스안에 있는 폴더별 이미지 데이터 이용
클래스안에 폴더별로 모든 데이터 각각 레이블링 및 전처리 작업
## 같은 클래스안에 있는 폴더별 이미지 데이터 이용
# class폴더 안에 tiger라는 폴더와, lion이라는 두개의 폴더가 있을 때
# 들어오는 데이터 전처리 관련 정의
transf = tr.Compose([tr.Resize(16),tr.ToTensor()])
trainset = torchvision.datasets.ImageFolder(root='./class', transform=transf)# 각 폴더별 데이터에 레이블링 및 전처리 작업을 수행
trainloader = DataLoader(trainset,batch_size=10, shuffle=False,num_workers=2)
print(len(trainloader))
직접 데이터 불러오기
import torch
import torchvision
import torchvision.transforms as tr # 데이터를 불러오면서 데이터 전처리 하기위한 라이브러리
from torch.utils.data import DataLoader, Dataset
# DataLoader는 배치사이즈형태를 만들어 딥러닝 학습을 할 때 이용할 수 있는 형태 만드는것,
# Dataset으 우리가 튜닝을 할 때 사용
import numpy as np
## 직접 데이터 불러오기
# numpy 형태로 들어왔을 경우
train_images = np.random.randint(256, size=(20,32,32,3)) # 32 by 32크기의 이미지 3개 채널이 20개 있다
train_labels = np.random.randint(2, size=(20,1)) # labels이 20개가 있다.
print(train_images.shape, train_labels.shape)
# 데이터 셋을 상속받을 class 선언
class TensorData(Dataset):
def __init__(self, x_data, y_data):
self.x_data = torch.FloatTensor(x_data)
self.x_data = self.x_data.permute(0,3,1,2) # 이미지 갯수, 채널 수, 이미지 너비, 높이 순서로 와야한다
# permute 함수를 통해 데이터 순서 바꿔줌
self.y_data = torch.LongTensor(y_data)
self.len = self.y_data.shape[0]
def __getitem__(self, index):
return self.x_data[index], self.y_data[index]
def __len__(self):
return self.len
train_data = TensorData(train_images,train_labels)
train_loader = DataLoader(train_data, batch_size=10,shuffle=True)
print(train_data[0][0].size())
꿀팁
밑에 코드가 기본 양식, 안에 코드는 입맛대로 코딩(커스터마이징)해주면 됩니다 ~!
### 개꿀팁
from torch.utils.data import Dataset
class MyDataset(Dataset):
def __init__(self):
def __getitem__(self, index):
def __len__(self):