Data 입력 → DataSet(Transformsed?) → DataLoader → Model
DataSet의 구성요소
DataLoader (Train/Test)
torch.utils에 있는 DataSet 상속받는 클래스로 커스텀
init (), len (), getitem () 설정 필수
예제
import torch
from torch.utils.data import Dataset, DataLoader
import cv2
class ImageDataset(Dataset):
def __init__(self, imgPathList, labelList, transforms=None):
self.imgPathList = imgPathList
self.labelList = labelList
self.transforms = transforms
def __len__(self):
return len(self.imgPathList)
def __getitem__(self, idx):
img_path = self.imgPathList[idx]
image = cv2.imread(img_path)
if self.transforms != None :
image = self.transforms(image=image)['image']
if self.labelList != None :
label = self.labelList[idx]
return image, label
else :
return image
예제
trainDataSet = CustomDataSet(tran_df['path'].values, trainLabelVec, trainTransform)
trainLoader = DataLoader(trainDataSet, batch_size=128, shuffle=True, num_workers=0)
valDataSet = CustomDataSet(val_df['path'].values, valLabelVec, testTransform)
valLoader = DataLoader(valDataSet, batch_size=128, shuffle=False, num_workers=0)
보통 adam이 좋긴 함. but 특정 데이터셋에선 적용 안될 수도
밑 예제와 같은 방식으로 lr을 따로 설정 가능
optimizer = torch.optim.Adam(params=model.parameters(), lr:3e-4)
optimizerParams = [
{'params' : model.encoder.paremeters(), 'lr': 3e-4},
{'params' : model.classifier.parameters(), 'lr':3e-3}
]
Optimizer = torch.optim.Adam(optimizerParams)
굉장히 많으므로 Document 들어가서 확인 추천
주로 쓰이는 것들
LossFunction마다 어떠한 input을 받는지 아는 게 매우 중요**
Criterion = torch.nn.binary_cross_entropy().to(device)
// multi layer perceptron의 반환값은 logit이므로 상황에 맞게 사용해야 한다
Criterion = torch.nn.binary_cross_entropy_with_logits().to(device)