반응형
1. 서론
지난 글 XOR 문제 딥러닝 모델 구현 (1) [Pytorch]에서 input이 3개인 모델을 구현하였는데 이번엔 필요한 인풋 2개만 사용하여 은닉층의 최소 개수를 살펴보고자 한다.
2. 본론
지난 글에서 사용하였던 코드에서 입력 노드와 은닉 노드의 개수만 수정하였으며 모델 모양은 그림 1과 같다.
코드는 아래와 같으며 지난 코드에서 Linear의 숫자만 수정하였다.
import torch
device = "cuda" if torch.cuda.is_available() else "cpu" # 장치 선택
# 입력
X = torch.Tensor([[0, 0],
[0, 1],
[1, 0],
[1, 1]]).to(device)
# 정답
Y = torch.Tensor([[0],
[1],
[1],
[0]]).to(device)
# XOR 모델
class XOR(torch.nn.Module):
def __init__(self):
super().__init__()
self.layer1 = torch.nn.Linear(2, 2)
self.layer2 = torch.nn.Linear(2, 1)
def forward(self, x):
x = torch.relu(self.layer1(x))
x = torch.sigmoid(self.layer2(x))
return x
model = XOR().to(device)
criterion = torch.nn.BCELoss().to(device) # Binary Cross Entropy
optimizer = torch.optim.SGD(model.parameters(), lr=0.02) # SGD 사용, 학습률 0.02
for t in range(10000):
y_pred = model(X)
loss = criterion(y_pred, Y) # loss 계산
if t % 1000 == 999:
print(f'epoch: {t + 1}/{10000}, loss: {loss.item()}')
optimizer.zero_grad() # 초기화
loss.backward() # 역전파
optimizer.step() # 가중치 갱신
with torch.no_grad():
print(f'출력: {model(X)}')
테스트를 해보니 은닉층의 노드 개수가 의외로 최소한의 노드 개수인 2개로도 학습이 되었다.
반응형
'Pytorch' 카테고리의 다른 글
CIFAR-10 CNN으로 학습하기 [Pytorch] (0) | 2022.05.12 |
---|---|
미니 배치(mini batch) [pytorch] (0) | 2022.04.26 |
XOR 문제 딥러닝 모델 구현 (1) [Pytorch] (0) | 2022.04.24 |
Pytorch, CUDA, cuDNN 설치 [windows 10] (0) | 2022.04.22 |