ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [TIL] pytorch Basic (2)
    개발자노트/네이버 부스트캠프 AI 2023. 11. 29. 00:34

     

    Linear transformation

    torch.nn.Linear

    선형변환

     

     

     

     


     

    nn.Module

    + 기능 ⇒ basic building block

    + nn.Module(basic building block) ⇒ 딥러닝 모델

    + nn.Module(딥러닝 모델) ⇒ 더 큰 딥러닝 모델

     

    nn.Module은 상자와 같다.

    import torch.nn as nn
    
    class MyModel(nn.Module):
        def __init__(self):
            super(MyModel, self).__init__()
            self.layer1 = nn.Linear(10, 5)
            self.layer2 = nn.Linear(5, 1)
    
        def forward(self, x):
            x = self.layer1(x)
            x = self.layer2(x)
            return x

    forward는 torch에서 미리 정의된 메소드라서 따로 호출하지 않아도 자동으로 호출된다.

     

     

    모듈을 상속한 클래스

    class MyComplexModel(nn.Module):
        def __init__(self):
            super(MyComplexModel, self).__init__()
            self.submodule1 = MyModel()
            self.submodule2 = nn.Linear(5, 3)
    
        def forward(self, x):
            x = self.submodule1(x)
            x = self.submodule2(x)
            return x

     

     

     


    AutoGrad

    =automatic differentiation

     

    자동미분 기능

    역전파 알고리즘을 가능하게 한다.

    모델 학습시 중요함

    x = torch.tensor([2.0], requires_grad=True)
    y = X**2
    z = y.mean()
    
    print(x.grad)  # None
    
    z.backward()	# 자동으로 미분 계산
    
    print(x.grad)  # d(z)/dx = 2*x = 4.0

     

     

    Optimizer

    기계학습에서 모델의 가중치를 학습하는 데 사용되는 알고리즘

     

    미분에 대한 업데이트

    손실함수를 최소화하도록 가중치를 조정

     

    SGD
    Stochastic Gradient Descent
    확률적 경사 하강법
    매개변수를 업데이트 할 때 일정한 학습률을 사용한다.
    (Stochastic = 확률적)

     

    Adam
    Adaptive Moment Estimation
    적응적 학습률을 사용하여 각 매개변수에 대해 독립적인 학습률을 조정한다.
    다양한 문제에서 잘 동작한다.

     

    Adagrad
    Adaptive Gradient Algorithm
    각 매개변수에 대한 학습률을 조절,
    과거 그래디언트 제곱의 누적합을 사용한다.

     

    RMSprop
    Root Mean Square Propagation
    Adagrad의 한계를 극복하기 위해 도입

     

     

     

    참고

    https://velog.io/@freesky/Optimizer

     

     

     

    실습을 해봤을 때 SGD의 성능이 가장 낮았고, Adam이 가장 좋은 성능을 나타내었다. 


     

     

     

    🔷Dataset & DataLoader

    Dataset class

    이 클래스를 상속해서 사용자 정의 데이터 셋을 만든다.

     

    입력 형태를 정의함

    입력 방식의 표준화

    다양한 입력 포맷

     

    데이터 형태에 따라 각 함수를 다르게 정의함

    from torch.utils.data import Dataset
    
    class CustomDataset(Dataset):
    	def __init__(self, ...):
            # 초기화 작업 수행
            # CSV, XML 데이터를 불러옴
    
        def __len__(self):
            return len(self.data)
    
        def __getitem__(self, index):
            # 인덱스에 해당하는 데이터 샘플 반환
            # 원본 데이터를 가져와서 전처리하고 데이터 증강하는 부분

     

     

     

     

     

    DataLoader class

    • data의 batch를 생성
    • 학습 직전 데이터의 변환을 책임
    • Tensor로 변환 + 전처리
    next(iter(DataLoader(dataset_iris, batch_size=4)))

    데이터셋을 미니배치로 나누어 모델에 공급한다.

    필요에 따라 데이터를 섞거나 병렬로 로딩할 수 있다.

     

     

    📑Parameters

    batch_size : 미니배치 크기(정수)
    shuffle : 데이터 섞을지 여부(bool)
    num_workers : 데이터 로드할 때 사용할 병렬 작업의 개수
    pin_memory : CPU로 데이터 로드 후, 이를 고정 메모리 영역으로 복사하여 GPU로 빠르게 전송할 지 여부 (bool)
    drop_last : 데이터셋 크기가 배치 사이즈로 나누어 떨어지지 않는 경우 마지막 미니배치를 버릴지 여부 (bool)

     

     

    collate_fn

    : 데이터 사이즈를 맞출 때 사용. 미니배치 생성하기 전 각 샘플을 처리하는 방법을 정의함.

    from torch.utils.data import DataLoader
    
    def collate_fn(batch):
        # batch는 리스트 형태로 각 샘플을 받음
        images, labels = zip(*batch)
        # 각 샘플에 대한 처리 수행 (예: 이미지 데이터 정규화, 텐서로 변환 등)
        processed_images = process_images(images)
        processed_labels = process_labels(labels)
        return processed_images, processed_labels
    
    # DataLoader 생성 시 collate_fn 매개변수에 collate_fn 함수 전달
    train_loader = DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True, num_workers=4, collate_fn=collate_fn)

     

    댓글

Designed by Tistory.