1. 미니배치와 배치 크기(Mini Batch and Batch Size)


  • 배치 경사 하강법은 학습에서 전체 데이터를 사용하므로 학습 과정이 매우 안정적이지만, 계산량이 많이 든다

  • 미니배치 경사 하강법은 학습에서 전체 데이터의 일부만을 보고 수행하므로 훈련 과정에서 시간이 오래 걸릴 수도 있지만 훈련 속도가 빠르다.

2. 이터레이션(Iteration)


위 사진을 보면 Batch size, Iteration, Epoch의 대한 개념이 이해가 가능할 것이다.

3. 데이터로드하기(Data Load)


import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim

from torch.utils.data import TensorDataset # 텐서 데이터셋
from torch.utils.data import DataLoader # 데이터로더

실습을 위해 기본적으로 필요한 세팅을 한다.

x_train  =  torch.FloatTensor([[73,  80,  75],
                               [93,  88,  93],
                               [89,  91,  90],
                               [96,  98,  100],
                               [73,  66,  70]])
y_train  =  torch.FloatTensor([[152],  [185],  [180],  [196],  [142]])

데이터를 입력한다

dataset = TensorDataset(x_train, y_train)

위 데이터를 TensorData의 입력으로 사용하고 dataset으로 저장한다.

# batch_size는 주로 2의 배수를 사용 
# shuffle=True로 하여 Epoch마다 데이터셋을 섞어서 데이터가 학습되는 순서를 바꿈
dataloader = DataLoader(dataset, batch_size=2, shuffle=True)

Dataloader는 기본적으로 2개의 인자를 받는데, dataset과 batch size이다.

model = nn.Linear(3,1)
optimizer = optim.SGD(model.parameters(), lr=1e-5)

이제 모델과 옵티마이저를 설계한다.

nb_epochs = 20
for epoch in range(nb_epochs + 1):
    for batch_idx, samples in enumerate(dataloader):
        print(batch_idx)
        print(samples)

        x_train, y_train = samples

        # H(x)계산
        prediction = model(x_train)

        # cost계산
        cost = F.mse_loss(prediction, y_train)

        #최적화
        optimizer.zero_grad()
        cost.backward()
        optimizer.step()

        print('Epoch {:4d}/{} Batch {}/{} Cost: {:.6f}'.format(
        epoch, nb_epochs, batch_idx+1, len(dataloader),
        cost.item()
        ))
Epoch    0/20 Batch 1/3 Cost: 0.361032
Epoch    0/20 Batch 2/3 Cost: 2.743644
Epoch    0/20 Batch 3/3 Cost: 3.741736
Epoch    1/20 Batch 1/3 Cost: 2.372217
Epoch    1/20 Batch 2/3 Cost: 2.237405
Epoch    1/20 Batch 3/3 Cost: 2.541936
Epoch    2/20 Batch 1/3 Cost: 2.544573
Epoch    2/20 Batch 2/3 Cost: 1.949817
Epoch    2/20 Batch 3/3 Cost: 1.238886
Epoch    3/20 Batch 1/3 Cost: 0.718011
Epoch    3/20 Batch 2/3 Cost: 4.471323
Epoch    3/20 Batch 3/3 Cost: 2.497370
Epoch    4/20 Batch 1/3 Cost: 2.311863
Epoch    4/20 Batch 2/3 Cost: 2.219517
Epoch    4/20 Batch 3/3 Cost: 0.412260
Epoch    5/20 Batch 1/3 Cost: 2.185984
Epoch    5/20 Batch 2/3 Cost: 2.298446
Epoch    5/20 Batch 3/3 Cost: 0.452585
Epoch    6/20 Batch 1/3 Cost: 1.856593
Epoch    6/20 Batch 2/3 Cost: 2.189931
Epoch    6/20 Batch 3/3 Cost: 1.691436
Epoch    7/20 Batch 1/3 Cost: 0.619386
Epoch    7/20 Batch 2/3 Cost: 2.804294
Epoch    7/20 Batch 3/3 Cost: 3.499679
Epoch    8/20 Batch 1/3 Cost: 2.049774
Epoch    8/20 Batch 2/3 Cost: 2.248272
Epoch    8/20 Batch 3/3 Cost: 1.071959
Epoch    9/20 Batch 1/3 Cost: 0.578942
Epoch    9/20 Batch 2/3 Cost: 4.566124
Epoch    9/20 Batch 3/3 Cost: 2.408615
Epoch   10/20 Batch 1/3 Cost: 2.372047
Epoch   10/20 Batch 2/3 Cost: 1.529424
Epoch   10/20 Batch 3/3 Cost: 1.798290
Epoch   11/20 Batch 1/3 Cost: 0.244626
Epoch   11/20 Batch 2/3 Cost: 2.760576
Epoch   11/20 Batch 3/3 Cost: 3.837979
Epoch   12/20 Batch 1/3 Cost: 2.004342
Epoch   12/20 Batch 2/3 Cost: 1.784926
Epoch   12/20 Batch 3/3 Cost: 3.575732
Epoch   13/20 Batch 1/3 Cost: 1.604547
Epoch   13/20 Batch 2/3 Cost: 2.562331
Epoch   13/20 Batch 3/3 Cost: 3.401046
Epoch   14/20 Batch 1/3 Cost: 2.044121
Epoch   14/20 Batch 2/3 Cost: 2.221576
Epoch   14/20 Batch 3/3 Cost: 1.071896
Epoch   15/20 Batch 1/3 Cost: 3.279944
Epoch   15/20 Batch 2/3 Cost: 3.039932
Epoch   15/20 Batch 3/3 Cost: 0.193200
Epoch   16/20 Batch 1/3 Cost: 2.378086
Epoch   16/20 Batch 2/3 Cost: 1.662553
Epoch   16/20 Batch 3/3 Cost: 1.726744
Epoch   17/20 Batch 1/3 Cost: 4.079601
Epoch   17/20 Batch 2/3 Cost: 1.917548
Epoch   17/20 Batch 3/3 Cost: 0.983619
Epoch   18/20 Batch 1/3 Cost: 2.603672
Epoch   18/20 Batch 2/3 Cost: 0.592571
Epoch   18/20 Batch 3/3 Cost: 4.586457
Epoch   19/20 Batch 1/3 Cost: 2.177874
Epoch   19/20 Batch 2/3 Cost: 1.850356
Epoch   19/20 Batch 3/3 Cost: 0.790117
Epoch   20/20 Batch 1/3 Cost: 1.886757
Epoch   20/20 Batch 2/3 Cost: 1.932452
Epoch   20/20 Batch 3/3 Cost: 1.717333

훈련 결과를 보면 Cost의 값이 점점 작아짐을 알 수 있다.

print(list(model.parameters()))
[Parameter containing:
tensor([[0.7885, 0.7621, 0.4585]], requires_grad=True), Parameter containing:
tensor([0.0153], requires_grad=True)]

학습이 된 모델의 파라미터를 한 번 출력하여 확인해보았다.

new_value = torch.FloatTensor([[73,80,75]])
pred_y = model(new_value)
print(pred_y)
tensor([[152.9346]], grad_fn=<AddmmBackward0>)

임의의 데이터를 입력하여 예측값을 확인해보았다.

profile
예비대학원생

0개의 댓글