def _train_batch_data(self, imgs, labels):
self.optimizer.zero_grad()
labels = labels.to(self.conf.device)
embeddings, feature_map = self.model.forward(imgs[0].to(self.conf.device))
loss_cls = self.cls_criterion(embeddings, labels)
loss_fea = self.ft_criterion(feature_map, imgs[1].to(self.conf.device))
loss = 0.5*loss_cls + 0.5*loss_fea
acc = self._get_accuracy(embeddings, labels)[0]
loss.backward()
self.optimizer.step()
return loss.item(), acc, loss_cls.item(), loss_fea.item()
딥러닝 모델을 돌리다보면 위와 같이 loss.item()으로 loss값을 받는 코드를 종종 볼 수 있다.
(참고로 위의 loss_cls,loss_fea는 각각 torch.nn의 CrossEntropyLoss, MSEloss이다)
위의 코드만 봤을때는 loss가 일견 스칼라 값으로 보일 수 있기 때문에 왜 loss가 아닌 loss.item()으로 값을 리턴하는지 궁금하다.
그렇다 앞선 말에서 알 수 있듯 이때 loss는 스칼라 값이 아니라 텐서이기 때문에 .items() 함수를 통하여 스칼라 값을 리턴해주는 것이다.
출처- https://tutorials.pytorch.kr/beginner/pytorch_with_examples.html
'기타_computer' 카테고리의 다른 글
python 코드 메모리 사용량, 시간 계산 (memory profiler) (0) | 2022.12.06 |
---|---|
tmux 간단 사용법 (0) | 2022.11.24 |