Pytorch로 시작하는 딥러닝 입문(05-03. 소프트맥스 회귀 구현하기)

2024. 3. 3. 21:53딥러닝 모델: 파이토치

소프트맥스 회귀를 F.cross_entropy를 사용해서 구현해보자. 

♣ 훈련 데이터와 레이블을 텐서로 선언하기

 

x_train 의 각 샘플은 4가지 특성을 가지고 있으며 총 8개의 샘플이 존재한다. y_train은 각 샘플에 대한 레이블인데, 0, 1, 2 의 값을 가지는 것으로 보아 총 3개의 클래스가 존재한다. 

 

 

♣ 소프트맥스 회귀 구현하기(로우 레벨)

x_train 의 크기는 8×4 이며 y_train의 크기는 8 × 1 이다. 최종 사용할 레이블은 y_train에서 원-핫 인코딩을 한 결과값이어야 한다. 클래스의 수가 3개이므로 y_train에 원-핫 인코딩한 결과는 8 × 3 의 개수를 가져야 한다. 

 

 

 

y_train에 원-핫 인코딩을 한 결과인 y_one_hot의 크기는 8 × 3 이다. 즉 W 행렬의 크기는 4×3 이어야 한다. (x*W = y 이니까) W와 b를 선언하고, 옵티마이저로 경사하강법을 사용하자. 그리고 학습률은 0.1로 설정한다. 

 

F.softmax( )와 torch.log( )를 사용하여 가설과 비용 함수를 정의하고, 총 1000번의 epoch를 수행한다. 

 

 

♣ 소프트맥스 회귀 구현하기(하이 레벨)

이제는 F.cross_entropy( )를 사용하여 비용 함수를 구현해보자. 주의할 점은 F.cross_entropy( ) 는 그 자체로 소프트맥스 함수를 포함하고 있으므로 가설에서 소프트맥스 함수를 사용할 필요가 없다는 것이다. 또한 F.cross_entropy( )는  F.nll_loss() 를 포함하기 때문에 원-핫 인코딩을 할 필요도 없다. 위와 동일한 x_train과 y_train을 사용한다. 

https://wikidocs.net/60572

 

05-03 소프트맥스 회귀의 비용 함수 구현하기

이번 챕터에서는 소프트맥스 회귀의 비용 함수를 구현해봅시다. 앞으로의 모든 실습은 아래의 코드가 이미 진행되었다고 가정합니다. ```python import torch im…

wikidocs.net

 

 

 

♣ 소프트맥스 회귀 nn.Module로 구현하기

이번에는 nn.Module로 소프트맥스 회귀를 구현해보자. 선형 회귀에서 구현에 사용했던 nn.Linear( )를 사용한다. 

output_dim=1이었던 선형 회귀 때와 달리 output_dim은 이제 클래스의 개수여야 한다. 

 

 

♣ 소프트맥스 회귀를 클래스로 구현하기