이 포스팅은 순수 개인 연구 목적으로 처음 딥러닝을 사용하며 정리용으로 작성되었습니다.
1. Pytorch 설치
#ANACONDA
conda install pytorch torchvision -c pytorch
#PIP
pip3 install torch torchvision
2. 텐서(Tensor)
numpy의 ndarray와 같은 자료구조라고 생각하면 됨.
이는 자동미분에 최적화되어있음.
#array data 바로 tensor화
data = [[1, 2],[3, 4]]
x_data = torch.tensor(data)
#numpy의 tensor화
#이 때 서로의 값을 참조하고 있기 때문에 변경사항이 서로 반영됨
np_array = np.array(data)
x_tensor = torch.from_numpy(np_array)
x_np = x_tensor.numpy()
#2차원 배열 인덱싱
tensor[0] #row indexing
tensor[:,0] #column indexing
#concat (dim=0: 세로로 concat, dim=1: 가로로 concat)
torch.cat([tensor, tensor, tensor], dim=1)
#곱하기 연산
#행렬간 연산
tensor @ tensor.T
tensor.matmul(tensor.T)
y3 = torch.rand_like(tensor)
torch.matmul(tensor, tensor.T, out=y3)
#행렬 요소 곱
z1 = tensor * tensor
z2 = tensor.mul(tensor)
z3 = torch.rand_like(tensor)
torch.mul(tensor, tensor, out=z3)
#단일요소의 tensor의 경우 item()메소드 활용, indexing하면 에러남.
agg = tensor.sum()
agg_item = agg.item()
#연산 뒤에 접미사로 _를 붙이면 inplace
tensor.add_(5)
3. DataSet과 DataLoader
#Dataset
#예제
class CustomImageDataset(Dataset):
def __init__(self, annotations_file, img_dir, transform=None, target_transform=None):
self.img_labels = pd.read_csv(annotations_file)
self.img_dir = img_dir
self.transform = transform
self.target_transform = target_transform
def __len__(self): #샘플 개수반환
return len(self.img_labels)
def __getitem__(self, idx): #샘플 반환(이미지와 라벨 dict형태로반환)
img_path = os.path.join(self.img_dir, self.img_labels.iloc[idx, 0])
image = read_image(img_path)
label = self.img_labels.iloc[idx, 1]
if self.transform:
image = self.transform(image)
if self.target_transform:
label = self.target_transform(label)
return image, label
#DataLoader
#Dataset 샘플에 쉽게 접근할 수 있게 iterable할 객체로 감싸줌.
#이 때 배치사이즈 및 shuffle할 수 있음
#예제
from torch.utils.data import DataLoader
train_dataloader = DataLoader(training_data, batch_size=64, shuffle=True)
test_dataloader = DataLoader(test_data, batch_size=64, shuffle=True)
train_features, train_labels = next(iter(train_dataloader))
print(f"Feature batch shape: {train_features.size()}")
print(f"Labels batch shape: {train_labels.size()}")
img = train_features[0].squeeze()
label = train_labels[0]
print(f"Label: {label}")
>>
Feature batch shape: torch.Size([64, 1, 28, 28])
Labels batch shape: torch.Size([64])
Label: 2
4. Transform
#transform, target_transform 매개변수를 통해 학습에 적합한 데이터로 조작가능
#ToTensor -> normalize
#Lambda -> onehot encoding
#예제
import torch
from torchvision import datasets
from torchvision.transforms import ToTensor, Lambda
ds = datasets.FashionMNIST(
root="data",
train=True,
download=True,
transform=ToTensor(),
target_transform=Lambda(lambda y: torch.zeros(10, dtype=torch.float).scatter_(0, torch.tensor(y), value=1))
)
'Programming > Data mining' 카테고리의 다른 글
Statistical Test (0) | 2023.06.24 |
---|---|
머신러닝 알고리즘 정리 (K-NN, SVM) (0) | 2020.07.18 |
머신러닝 알고리즘 정리 (Decision Tree, Random Forest) (0) | 2020.07.18 |
머신러닝 알고리즘 정리 (PCA, LDA) (0) | 2020.07.05 |
머신러닝 알고리즘 정리 (Linear regression, Logistic regression) (0) | 2020.06.26 |