Training proecss
Gradient Accumulation
gpu가 좋은 상황이 아닐 경우 사용할만한 방법이다.
num_accum = 2
optimizer.zero_grad()
for epoch in range(10):
running_loss = 0.0
for i, data in enumerate(train_loader, 0):
inputs, labels = data
outputs = net(inputs)
loss = criterion(outputs, labels) / num_accum
loss.backward()
if i % num_accum == 0:
optimizer.step()
optimizer.zero_grad()
- num_accum만큼의 epoch을 돌아야지 model의 parameters를 업데이트.
- critertion의 결과물에 num_accum을 나눠주는 이유는 일반화때문이라고 한다.
- 뇌피셜: num_accum동안의 loss를 한번의 step만에 반영해줘야하기 때문에 개별적인 loss값에 일정한 가중치를 두어 균등화하는 효과를 가지는 것 같다.
Leave a comment