1. Project Template
https://github.com/victoresque/pytorch-template
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속성에 저장된 값을 가지고 파라미터 업데이트
'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 |