Python(Colab) 파이토치(Pytorch) + 논리 회귀 (다항)

2023. 6. 20. 22:18파이썬/머신러닝 및 딥러닝

1. 데이터 셋 설정

 

x_train = [[1,2,1,1],
           [2,1,3,2],
           [3,1,3,4],
           [4,1,5,5],
           [5,7,5,5],
           [6,2,5,6],
           [7,6,6,6],
           [8,7,7,7]
           ]
y_train =  [0,0,0,1,1,1,2,2]  #결과도 3개

x_train = torch.FloatTensor(x_train)
y_train = torch.LongTensor(y_train)
 
x_train.shape , y_train.shape

 

2. 모델 설정

model = nn.Sequential(
    nn.Linear(4,3)
)

# 4개 input 3개 output

print(model)

 

3. 학습하기

 

y_pred = model(x_train)
y_pred

 

 

4. 손실율 확인후 반복 학습

 

 
#🔴 다항 논리 회귀에서는 BCELoss() 대신에 CrossEntropyLoss()를 사용

# CrossEntropyLoss()는 소프트맥수 함수가 포함되어있다
# 클래스의 개수만큼 확률을 반환해준다.
 
loss = nn.CrossEntropyLoss()(y_pred,y_train)
loss
 
optimizer = optim.SGD(model.parameters(),lr=0.1)
 
epochs =1000

for epoch in range(epochs+1):
    y_pred = model(x_train)
    loss = nn.CrossEntropyLoss()(y_pred,y_train)
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

    if epoch % 100 == 0:
        print(f'Epoch{epoch}/{epochs} // Loss{loss:.6f}')
 

학습 후 기울기 확인

print(list(model.parameters()))

 

✔️CrossEntropyLoss(): Softmax()함수가 포함되어 있으며, 다항 논리 회귀에서 사용

 

5. 테스트 데이터 입력 후 확인

 

x_test= torch.FloatTensor([[1,2,5,6]])
y_pred = model(x_test)
y_pred
 

 

6. 수치를 Softmax()로 0~1사이로 최적화

 

y_prob = nn.Softmax(1)(y_pred)
y_prob
 

 

8. 결과치 확인

 

리스트가 두 번 쌓여있다 확인!

print(f'0일 확률 : {y_prob[0][0]:.2f}')
print(f'1일 확률 : {y_prob[0][1]:.2f}')
print(f'2일 확률 : {y_prob[0][2]:.2f}')
 
728x90