반응형
안녕하세요~
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란?
- 클래스 내부에 포함되어있는 메소드나 변수 등을 의미합니다.
따라서 개인의 코딩 스타일에 따라 사용하시면 될 거 같습니다~
감사합니다.
반응형
'AI' 카테고리의 다른 글
RuntimeError: stack expects each tensor to be equal size, but got ~ (0) | 2021.11.09 |
---|---|
RuntimeError: The size of tensor a (4) must match the size of tensor b (3) at non-singleton dimension 0 (0) | 2021.11.09 |
5x5 Conv 를 3x3 Conv2개로 대체 효율 (0) | 2021.11.08 |
[논문리뷰] DropBlock: A regularization method forconvolutional networks (0) | 2021.11.02 |
Distance-IOU Loss (DIOU) 논문 리뷰 (0) | 2021.07.12 |