DL/Pytorch

[pytorch] pytorch에서 customized loss function 사용하기

daeheepark 2019. 7. 9. 16:28

"Yoo, D., & Kweon, I. S. (2019). Learning Loss for Active Learning. Retrieved from http://arxiv.org/abs/1905.03677" 을 구현하던 중에 loss prediction module을 학습시키기 위한 loss for loss prediction module을 다음과 같이 정의했다.

 

따라서 기존에 정의되어 있지 않은 loss 를 새롭게 정의해서 사용해야할 필요가 생겼다.

 

 

Pytorch에서 loss는 어떻게 동작하나?

  • loss 함수에는 input을 Variable로 바꾸어 넣어준다. Variable은 required_grad flag가 True로 기본 설정되어 있는데, 이는 Pytorch의 아주 유용한 기능인 Autograd, 즉 자동으로 gradient를 계산할 수 있게 해준다.
  • 결국 따로 loss 함수의 forward나 backward를 일일히 계산하여 지정해주지 않아도, tensor연산을 이용한 loss 함수에 대한 gradient를 자동으로 계산해준다. 

 

Pytorch 개발자 smth에 의하면 저렇게 결과값만 계산하는 함수를 작성해도 autograd가 자동으로 gradient를 계산해준다.

 


 

input을 Variable로 넣어주어야 한다.

 

다만 최근에 Variable이 deprecated될 예정이고, 다른 함수를 사용하라는 글을 어디서 본것같은데 확인후 수정해야겠다.


(19.11.01 수정)

 

torch.autograd.Variable과 torch.Tensor는 2018년에 Tensor로 통합되었다.

Variable(tensor, requires_grad) 는 여전히 잘 동작하지만, Variable이 아닌 Tensor를 반환한다.

Torch의 requires_grad는 False가 default이므로 requires_grad=True 플래그가 필요하다.

 

var.backward(), var.detach(), var.register_hook() 등의 메소드도 텐서에도 똑같이 동작한다. (tensor.backward(), ...)

 

 

참고 자료 : 

https://discuss.pytorch.org/t/build-your-own-loss-function-in-pytorch/235/39

https://pytorch.org/docs/stable/autograd.html