AI

torch.nn 과 torch.nn.functional 차이점!

전자둥이 2021. 11. 8. 16:27
반응형

안녕하세요~

pytorch 를 활용한 레퍼런스 코드를 보기위해 git에 돌아다니다보면 layer 및 activation Function 을 구현할 때

torch.nn.Dropout 를 쓰는 경우도 있고, torch.nn.functional.dropout 을 쓰는 경우도 있습니다.

같은 dropout인데 왜 두개나 있는지 궁금해서 구글에 서칭해본 결고 다음 블로그에서 잘 설명해주어서 도움이 되었습니다.

https://cvml.tistory.com/10

당연 영어 사이트가 저를 맞이할줄 알았는데 한글로 잘 정리해줘서 고마웠습니다.(감사합니다~~)

##torch nn
import torch
import torch.nn as nn

loss = nn.CrossEntropyLoss()
input = torch.randn(3,5,requires_grad=True)
target = torch.empty(3, dtype=torch.long).random_(5)
output = loss(input, target)
output.backward()
##torch.nn.functional
import torch
import torch.nn.functional as F

input = torch.randn(3,5,requires_grad=True)
target = torch.randint(5,(3,),dtype=torch.int64)
loss = F.cross_entropy(input,target)
loss.backward()

torch.nn 과 torch.nn.functional코드 차이점


torch.nn 과 torch.nn.functional의 차이점은 클래스, 함수의 차이입니다. (동작은 똑같습니다)

따라서 torch.nn.functional은 바로 인스턴스화 시킬 필요 없이 바로 입력값을 받을 수 있고
torch.nn은 인스턴스화를 시켜야하며, 대신 attribute을 활용해 state를 저장하여 활용할 수 있습니다.

클래스에서 attribute란?
 - 클래스 내부에 포함되어있는 메소드나 변수 등을 의미합니다.

따라서 개인의 코딩 스타일에 따라 사용하시면 될 거 같습니다~

감사합니다.

 

[개발팁] torch.nn 과 torch.nn.functional 어느 것을 써야 하나?

파이토치를 쓰다보니 같은 기능에 대해 두 방식(torch.nn, torch.nn.functional)으로 구현 된 것들이 있다. 관련된 글들을 찾아보니 결론은 두 방식 다 같은 결과를 제공해주며 편한 것으로 선택해서 개

cvml.tistory.com

 

 

반응형