Data is ___ ?
article thumbnail

선형 회귀식

개념

  • 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 등도 정리하기 

profile

Data is ___ ?

@콩순이컴퓨터

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...