[ic]nn.Dropout(p=0.2)[/ic]
확률을 의미하는 p인자는 익숙한 사람이 많다.
하지만 [ic]nn.Dropuout(p=0.2, inplace=True)[/ic]와 같이 [ic]inplace[/ic]가 붙어 있는걸 보는 순간 불편하다.
이번 포스팅에서는 [ic]inplace= True[/ic]일때와 [ic]False[/ic]일때 어떤 차이가 있는지 알아보자.
이 글과 읽으면 좋은글
- [pytorch] transforms.Compose 사용 방법
- [pytorch] ImageFolder 사용 방법
- [pytorch] model.eval() vs torch.no_grad() 차이
1) [ic]inplace=False[/ic] 인경우
import torch
import torch.nn as nn
torch.manual_seed(42)
x = torch.randn(5, 3)
print('x :\n',x)
dropout = nn.Dropout(0.2, inplace=True)
y = dropout(x)
print('x :\n',x)
print('y :\n',y)
#output
'''
x :
tensor([[ 0.3367, 0.1288, 0.2345],
[ 0.2303, -1.1229, -0.1863],
[ 2.2082, -0.6380, 0.4617],
[ 0.2674, 0.5349, 0.8094],
[ 1.1103, -1.6898, -0.9890]])
x :
tensor([[ 0.4209, 0.1610, 0.2931],
[ 0.0000, -1.4036, -0.2329],
[ 2.7603, -0.0000, 0.5771],
[ 0.3342, 0.6686, 1.0117],
[ 1.3879, -2.1122, -1.2362]])
y :
tensor([[ 0.4209, 0.1610, 0.2931],
[ 0.0000, -1.4036, -0.2329],
[ 2.7603, -0.0000, 0.5771],
[ 0.3342, 0.6686, 1.0117],
[ 1.3879, -2.1122, -1.2362]])
'''
[ic]dropout()[/ic]을 한 후 return값에 집중해보자.
y를 보면 랜덤하게 dropout이 적용된걸 알 수 있다.
특별한 건 없어보인다.
2) [ic]inplace=True[/ic] 인경우
import torch
import torch.nn as nn
torch.manual_seed(42)
x = torch.randn(5, 3)
print('x :\n',x)
dropout = nn.Dropout(0.2, inplace=False)
y = dropout(x)
print('x :\n',x)
print('y :\n',y)
#ouptut
'''
x :
tensor([[ 0.3367, 0.1288, 0.2345],
[ 0.2303, -1.1229, -0.1863],
[ 2.2082, -0.6380, 0.4617],
[ 0.2674, 0.5349, 0.8094],
[ 1.1103, -1.6898, -0.9890]])
x :
tensor([[ 0.3367, 0.1288, 0.2345],
[ 0.2303, -1.1229, -0.1863],
[ 2.2082, -0.6380, 0.4617],
[ 0.2674, 0.5349, 0.8094],
[ 1.1103, -1.6898, -0.9890]])
y :
tensor([[ 0.4209, 0.1610, 0.2931],
[ 0.0000, -1.4036, -0.2329],
[ 2.7603, -0.0000, 0.5771],
[ 0.3342, 0.6686, 1.0117],
[ 1.3879, -2.1122, -1.2362]])
'''
다른점이 보이는가?
input인 x 값이 변경되었다.
이게 차이다.
[ic]inplace[/ic]는 기존 input값 까지 바꿔버린다.
그렇다면 왜 굳이 [ic]inplace=True[/ic] 설정을 할까?
바로 메모리 효율성 때문이다.
기존 input값 데이터를 메모리에 가지고 있을 필요가 없으니 퍼포먼스적으로 유리하다.
하지만 debug할땐 [ic]inplace=False[/ic]가 유리할 수 있다.
여러분 상황에 맞게 적절하게 쓰기 바란다.
'머신러닝,딥러닝 > 딥러닝' 카테고리의 다른 글
[딥러닝] Fine Tuning(미세 조정) 꿀 tip (0) | 2022.12.27 |
---|---|
[pytorch] pretrained model 쉽게 사용하는 방법 (0) | 2022.12.26 |
[pytorch] model.eval() vs torch.no_grad() 차이 (1) | 2022.12.21 |
[pytorch] ImageFolder 사용 방법 (0) | 2022.12.21 |
[pytorch] transforms.Compose 사용 방법 (0) | 2022.12.21 |
댓글