선형 회귀식
개념
- nn.Linear가 하나 있는 모델
- 선형식은 모든 데이터를 직선으로 예측하기 때문에 학습이 매우 빠르다는 장점이 있지만, 데이터 내 변수들은 일반적으로 비선형 관계를 갖기 때문에 선형 모델을 가지고 예측하는 것은 한계
코드
nn.Linear(N, M, bias = True) # N : 입력변수의 개수, M : 출력 변수의 개수
다층 신경망(Multi-layer Perceptron : MLP)
개념
- nn.Linear( )을 줄지어 여러 층으로 구성된 깊은 신경망
코드
🎀 __init__ : 필요한 변수들을 정의
- ⚠ torch.nn의 모듈(nn.Module)을 사용하기 위해서 반드시 super().__init__()을 해주어야 한다.
- super() : 상속받은 부모클래스를 의미한다. 부모 클래스를 불러와서 __init__()을 수행한다는 것은 부모클래스의 생성자를 불러주는 것을 의미한다.
- super().__init__()의 역할 : nn.Module에서 __init__ 함수에 정의된 변수들을 상속받는 역할 (이러한 변수들을 상속받고 사용해야하므로 반드시 super().__init__()을 사용해주어야 하는 것)
- Super( ).__init( ) VS Super( ).__init__(classname, self) : 사용하는 데 다른 점은 없다. (단순히 현재 사용하는 클래스가 어떤 클래스인지 알리는 용도로 작성됨)
- dropout
- 연산이 될 때마다 50%의 비율로 랜덤하게 노드를 없앤다.
- forward 함수에서 적용 위치를 정해준다.
🎀 forward : 어떻게 실행시킬 지 정의
- F.relu(self.fc1(x))
- 선형 연산 후 ReLU 활성화 함수 적용
- 활성화 함수는 이전 층에서 다음 층으로 값을 비선형적으로 변환하여 넘겨주는 역할
- 층과 층 사이의 관계를 비선형으로 만들어 성능 향상에 도움
- x = self.dropout(F.relu(self.fc2(x)))
- 데이터의 노드가 50개인 이전 은닉층에서 30개의 은닉층으로 넘어갈 때 ReLU 거치고
- dropout을 이용해 30개 중 50% 확률로 값을 0으로 만든다. (과적합 방지)
- 단, 사용 위치는 임의로 정할 수 있지만 절대로 출력층에 사용해서는 안된다.
- return
- 배치가 32라면 출력값이 하나이기 때문에 크기가 torch.Size([32, 1])인 결과 출력
🎀 ex1) Regressor 모델
class Regressor(nn.Module) :
def __init__(self) :
super().__init__()
self.fc1 = nn.Linear(13, 50, bais = True)
self.fc2 = nn.Linear(50, 30, bias = True)
self.fc3 = nn.Linear(30, 1, bias = True)
# 연산이 될 때마다 50%의 비율로 랜덤하게 노드를 없앤다. (forward 함수에서 적용 위치를 정해준다.)
self.dropout = nn.Dropout(0.5)
def forward(self, x) :
x = F.relu(self.fc1(x))
x = self.dropout(F.relu(self.fc2(x)))
x = F.relu(self.fc3(x))
return x
🎀 ex2) ...
더보기
⚠ CNN, RNN, GNN, GAN 등도 정리하기
'Programming > Pytorch' 카테고리의 다른 글
[Pytorch] GPU device (0) | 2023.01.28 |
---|---|
[Pytorch] Dataset, DataLoader (0) | 2023.01.27 |
[Pytorch] 텐서(차원) 관련 함수 정리 (0) | 2023.01.18 |
[Pytorch] 모듈 및 함수 정리 (0) | 2023.01.15 |
[Pytorch] 파이토치에서 모델 출력하기 (0) | 2023.01.03 |