[Week 6- Day 3] 회고
# AlexNet 학습시키기
생각보다 많이 헤맸다. 특히 자료형이나 shape을 맞춰주는 게 까다로웠어서 정리해둔다.
# GPU 사용
print(f"CUDA: {torch.cuda.is_available()}")
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
# train AlexNet
alexnet = tvmodels.alexnet(pretrained=True).to(device)
loss_fn = FocalLoss()
optm = torch.optim.Adam(alexnet.parameters(), lr=0.01)
for epoch in range(20):
avg_loss = []
for i, (img, label) in enumerate(train_ds):
img = Variable(img.unsqueeze(0)).to(device)
label = torch.tensor([label]).to(device)
optm.zero_grad()
y_pred = alexnet.forward(img)
loss = loss_fn(y_pred, label)
avg_loss.append(loss)
loss.backward()
optm.step()
print("epoch: {} Loss: {:.4f}".format(epoch, sum(avg_loss) / len(train_ds)))
plt.bar(sum_loss)
## 피어 세션
미션 : 멘토링 특강, 두런두런
멘토링 조언으로 내가 어떤 실험을 했는지, 난 어떤 걸 얻어가고 싶은지 (방향성)를 정리할 필요가 있다고 하셨다.
근데 피어세션 때까지 베이스라인을 다 못짜서 팀원들에게 물어보고 그랬다. 알고보니 Metric과 loss함수는 다른 것이고, 보통 eval할 때 Metric을 사용하는 것이라고 한다.
난 이번 이미지 분류 대회를 하면서 베이스라인을 짜보고, EDA 코드 익숙해지는 것을 목표로 한다. 다시 짠다고 할 때 빠르게 진행할 수 있도록.
캐글 스터디를 하면서 마스터님이 호기심을 더 가졌으면 한다는 피드백을 해주셨다. 실제 현업에서는 target 변수란 존재하지 않으니 많은 변수들로 실험하는 것을 긍정적으로 본다. 생각해보니 다른 변수들과 시각화를 더 많이 한다면 다른 방법도 생각해볼 수 있겠다 했다. 내가 결측치를 시각화해보고 길을 찾아나간 것처럼. 그래서 마찬가지로 EDA 코드를 잘 정리해두어야 겠다.
결국은 본인의 생각들을 남에게 설득하는 일이라는 것을 기억해야 겠다고 느꼈다. 대본없이 즉석으로 발표하는 거라 걱정했는데, 끝나고 난 뒤에 사람의 얼굴을 인식한 것은 처음인 것같다. 항상 내가 한 말에만 우왕좌왕 이제 다른 사람 말들은 들어오지도 않았는데, '모델도 짜셨네요' 라는 한 마디에 얼굴을 확인하니 평소와 똑같아서 뭔가 안심이 된 것 같다. 이게 바로 신뢰 관계라는 걸까. 내가 무언가 자랑을 해도 우와 라고 해줄 수 있다는 믿음(?). 난 살짝 비교를 해서 문제인데 나도 노력해야지.
시간관리를 잘하는 게 중요하다고 한다. 왜? -> 시행 -> 피드백 하는 것을 반복해보라고 한다.
Early Stopping을 사용해야 겠다고 생각했다.
난 잘 때가 제일 좋다. 내가 이 일을 하게 된다면 나의 수면시간이 줄어들 것 같아서 걱정된다.
내가 지금 힘든 이유는 무언가 할 일이 많이 밀려있다는 생각이 들어서다.
그러니까 이전에 참고해야할 코드 정리도 안되어 있고, 모델 학습 하나 제대로 해둔 게 없는데 내일은 마지막 평일이다.
레포트도 써야할 텐데 실험한 게 없으면 어떻게 되는 거지. 내일까지만 버티자!