일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 머신러닝 기초
- 백준
- 강의자료
- Cross entropy
- Python
- loss
- MSE
- rnn
- machine learning
- classifier
- AI
- 정렬
- Natural Language Processing with PyTorch
- Hypothesis
- 파이썬
- 자연어처리
- 파이토치
- Deep learning
- tensorflow
- 스택
- Softmax
- 딥러닝
- BAEKJOON
- 알고리즘
- pytorch
- 강의정리
- DP
- 홍콩과기대김성훈교수
- 머신러닝
- DynamicProgramming
- Today
- Total
개발자의시작
[Pytorch] 04-2 Loading Data 본문
이 글은 모두를위한딥러닝 시즌2 https://github.com/deeplearningzerotoall/PyTorch 을 정리한 글입니다.
Data in the Real World
- 복잡한 머신러닝 모델을 학습하려면 엄청난 양의 데이터가 필요하다.
- 대부분 데이터셋은 적어도 수십만 개의 데이터를 제공한다.
Data in the Real World : Problem
- 엄청난 양의 데이터를 한 번에 학습시킬 수 없다.
└ 너무 느리다.
└ 하드웨어의 한계로 불가능하다.
- 그렇다면 일부분의 데이터로만 학습하면 어떨까?
Mini-batch
이렇게 해서 나온 아이디어가 미니배치이다. 전체 데이터를 미니배치라는 작은 데이터로 균일하게 나눠서 미니배치 하나하나씩 학습하는 방법이다. 이렇게 하면 컴퓨터가 데이터 셋을 모든 데이터의 cost를 계산한 뒤 gradient descent를 하지 않고, 각 미니배치의 cost에 대해서만 gradient descent를 계산하기 때문에 무리가 덜 간다.
PyTorch Dataset
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
from torch.utils.data import Dataset
class CustomDataset(Dataset):
def __init__(self):
self.x_data = [[ 73., 80., 75.],
[ 93., 88., 93.],
[ 89., 91., 90.],
[ 96., 98., 100.],
[ 73., 66., 70.]]
self.y_data = [[152.], [185.], [180.], [196.], [142.]]
def __len__(self):
return len(self.x_data)
def __getitem__(self, idx):
x = torch.FloatTensor(self.x_data[idx])
y = torch.FloatTensor(self.y_data[idx])
return x, y
dataset = CustomDataset()
|
- torch.utils.data.Dataset 상속
- __len__() : 이 데이터셋의 총 데이터 수
- __getitem__() : 어떠한 인덱스 idx를 받았을 때, 그에 상응하는 입출력 데이터를 반환
PyTorch DataLoader
1
2
3
4
5
6
7
|
from torch.utils.data import DataLoader
dataloader = DataLoader(
dataset,
batch_size=2,
shuffle=True
)
|
- torch.utils.data.DataLoader 사용
- batch_size: 각 미니배치의 크기
└ 통상적으로 2의 제곱수로 설정한다.( 16, 32, 64...)
- shuffle=True : Epoch 마다 데이터셋을 섞어서 데이터가 학습되는 순서를 바꾼다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
nb_epochs = 20
for epoch in range(nb_epochs + 1):
for batch_idx, samples in enumerate(dataloader):
x_train, y_train = samples
# H(x) 계산
prediction = model(x_train)
# cost 계산
cost = F.mse_loss(prediction, y_train)
# cost로 H(x) 개선
optimizer.zero_grad()
cost.backward()
optimizer.step()
# 100번마다 로그 출력
print('Epoch {:4d}/{} Batch: {}/{} Cost: {:.6f}'.format(
epoch, nb_epochs, batch_idx+1, len(dataloader), cost.item()
))
|
- enumerate(dataloader) : minibatch 인덱스와 데이터를 받음.
- len(dataloader) : 미니배치 개수
'머신러닝(machine learning)' 카테고리의 다른 글
[Pytorch] 05-2 Logistic Regression 2 (0) | 2021.12.23 |
---|---|
[Pytorch] 05-1 Logistic Regression (0) | 2021.12.08 |
[Pytorch] 04-1 Multivariate Linear Regression (0) | 2021.11.30 |
[Pytorch] 03 Deeper Look at GD (0) | 2021.11.30 |
[Pytorch] 02 Linear regression (0) | 2021.11.30 |