과제 2에서 코드 관련 질문 있습니다.
soheekim911 opened this issue · comments
안녕하세요 수업 잘 듣고 있습니다.
과제를 하다가 궁금한 점이 있었는데 이제야 질문드립니다..!
-
cifar10 dataset에서 데이터를 확인하기 위한 부분에서 나온 코드입니다.
이 떄 img = img/ 2+0.5 부분이 unnormalize하는 것이라고 설명을 써두셨는데요,
애초에 데이터셋에서는 왜 저렇게 어둡게 normalize를 해둔 것일까요?
def imshow(img): img = img / 2 + 0.5 # unnormalize
-
이 부분은 experiment define하는 셀 중 train 부분인데, 5번째 줄에서 optimizer.zero_grad()가 나와서
epoch마다 gradient를 리셋하는 것은 알겠는데 맨 끝줄 training 중에는 왜 optimizer.zero_grad()가 나오는지 모르겠습니다.
`
# ==== Train ===== #
net.train()
optimizer.zero_grad()
running_loss = 0.0
train_loss = 0.0
for i, data in enumerate(trainloader, 0):
# get the inputs
inputs, labels = data
inputs = inputs.view(-1, 3072)
inputs = inputs.cuda()
labels = labels.cuda()
# zero the parameter gradients
optimizer.zero_grad() ###
`
좋은 질문들 너무 감사드립니다!
-
저희가 Neural Net 모델에 데이터를 인풋으로 넣어줄 때는 일반적으로 인풋 값들이
-1~1
사이로 정규화 될 때 성능이 높다고 empirical 하게 보고되고 있어서 (어둡게?) Normalize를 하는데요.imshow
함수는 원본 이미지를 시각화하는 함수라서 다시 matplotlib가 원하는 값의 범위(0~1
)를 맞춰주기 위해서 2로 나누고 0.5를 다시 더해줍니다! -
맨 끝줄의 optimizer.zero_grad()는 코드를 정리하다가 미처 지우지 못한 부분이네요 👍
수정하도록 하겠습니다!
이해가 되었습니다. 답변 감사드립니다!!