본문 바로가기

boostcamp AI tech/boostcamp AI

PyTorch Project

728x90

 

1. Project Template

https://github.com/victoresque/pytorch-template

 

GitHub - victoresque/pytorch-template: PyTorch deep learning projects made easy.

PyTorch deep learning projects made easy. Contribute to victoresque/pytorch-template development by creating an account on GitHub.

github.com

pytorch-template/
│
├── train.py - main script to start training
├── test.py - evaluation of trained model
│
├── config.json - holds configuration for training
├── parse_config.py - class to handle config file and cli options
│
├── new_project.py - initialize new project with template files
│
├── base/ - abstract base classes
│   ├── base_data_loader.py
│   ├── base_model.py
│   └── base_trainer.py
│
├── data_loader/ - anything about data loading goes here
│   └── data_loaders.py
│
├── data/ - default directory for storing input data
│
├── model/ - models, losses, and metrics
│   ├── model.py
│   ├── metric.py
│   └── loss.py
│
├── saved/
│   ├── models/ - trained models are saved here
│   └── log/ - default logdir for tensorboard and logging output
│
├── trainer/ - trainers
│   └── trainer.py
│
├── logger/ - module for tensorboard visualization and logging
│   ├── visualization.py
│   ├── logger.py
│   └── logger_config.json
│  
└── utils/ - small utility functions
    ├── util.py
    └── ...

- 이 템플릿을 clone하고 프로젝트를 진행할 수 있다.


- colab은 기본적으로 cell단위 프로그래밍이 가능하게 되어 있지만 colab 가상 머신을 ssh로 접속해서 vscode로 여는 방식으로도 개발이 가능하다. 가용gpu자원이 없다면 불편하지만 colab 머신을 사용해보자 참고링크

- 매번 데이터가 다 날아가니까 drive mount를 하고 저장을 잘 해야한다.

 

2. Backward : AutoGrad & Optimizer

for epoch in range(epochs):
    optimizer.zero_grad()
    output = model(input)
    loss = criterion(output, input)
    loss.backward
    optimizer.step()

- 이미 구현된 모듈들은 backward, optimizer 함수가 정의되어 있다. 변경하고 싶다면 overriding하면 된다.

 

3. Dataset

class CustomDataset(Dataset): 
    # dataset initialization
    def __init__(self, text, label):
        self.label = label
        self.data = text

    # length of the dataset
    def __len__(self): 
        return len(self.label)

    # return tensor at index idx
    def __getitem__(self, idx): 
        label = self.data[idx]
        text = self.data[idx]
        sample = {'text':text, 'class':label}
        return sample

 

- 꼭 init에서 데이터에 대한 전처리를 다 할 필요는 없다.

- 일반적으로는 __getitem__에서 on the fly로 한 개씩 꺼낼때 전처리를 한다.(cpu) 

4. Dataloader

- dataloader는 dataset을 묶어서 batch를 구성한다던지, shuffle을 하는 등의 동작을 수행한다.

MyDataLoader = DataLoader(MyDataset, batch_size=2, shuffle=True)
next(iter(MyDataLoader))

for batch_dataset in MyDataLoader:
    print(batch_dataset)

- sampler : dataloader가 dataset에서 idx번째 데이터를 가져올때, 그 idx를 컨트롤 할 수 있다.

- batch_sampler :

- collate_fn :

    - (x1,y1), (x2,y2) -> (x1,x2), (y1,y2) 이렇게 batch단위로 묶어주는 녀석이다.

    - xdata들의 size가 같지 않으면 batch로 묶을 수가 없다.

    - 따라서 길이가 다른 여러 sequence data에 padding을 적용하고 싶을때 사용 가능

 

5. model train procedure

- 0. define model, loss, optimizer, dataloader(dataset)
- 1. model.to('device')
- 2. model.train()
- 3. epochs
          - data.to(device)
          - optimizer.zero_grad()
          - forward
          - loss
          - loss.backward()
          - optimizer.step()
          
- 4. test
          - with torch.no_grad():
          - forward
          - loss

- forward시에 required_grad=True인 tensor, y_pred 반환

- loss는 이 y_pred를 가지고 오차 계산

- loss.backward()를 통해 loss를 각 parameter들에 대해 미분한 값을 각 파라미터들의 .grad 속성에 저장

- step에서 optimizer는 전달받은 Model의 parameter들을 통해 .grad속성에 저장된 값을 가지고 파라미터 업데이트

728x90
반응형

'boostcamp AI tech > boostcamp AI' 카테고리의 다른 글

Monitoring tools  (0) 2023.11.15
Model save, load & Transfer Learning  (0) 2023.11.15
PyTorch Basics  (0) 2023.11.13
Maximum Likelihood Estimation  (0) 2023.11.12
Bayes Theorem  (0) 2023.11.10