카테고리 없음

딥러닝 3일차

write31991 2026. 9. 9. 16:16

< 복습 >

- ReLU

    - max(0, x) ~ 이 의미는 x가 0보다 크면 x를 선택하고, 0보다 작으면 0으로 선택함.

    - 그래프 모양

 < 분류 모델링 1 >

- 이진 분류 모델 구조

    - 함수 (Function) : 입력값(x)을 넣으면 출력값(y)을 준다. (변환)

    - 이진 분류의 출력층 : 출력층의 결과를 0과 1로 변환해주는 함수가 필요

       - 활성 함수 : 시그모이드 (Sigmoid)   -> 이진 분류는 출력층에 시그모이드를 붙여줘야 하는구나~

         * np.where( 조건문, True일 때 값, False일 때 값)

       - 분류 모델 평가 : Confusion Matrix

         - 일반적으로 이진 분류일 때, 

            ✔︎ 우리의 관심사 = 1, 양성 Positive

            ✔︎ 그 외 = 0, 음성 Negative

 

def make_DataSet(x_train, x_val, y_train, y_val, batch_size=32)

	# 데이터 텐서로 변환
    x_train_tensor = torch.tensor(x_train, dtype=torch.float32)
    y_train_tensor = torch.tensor(y_train.values, dtype=torch.float32).view(-1, 1)
    x_val_tensor = torch.tensor(x_val, dtype=torch.float32)
    y_val_tensor = torch.tensor(y_val.values, dtype=torch.float32).view(-1, 1)
    
    # TensorDataset 생성 : 텐서 데이터셋으로 합치기
    train_dataset = TensorDataset(x_train_tensor, y_train_tensor)
    
    # DataLoader 생성
    train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle = True)
    
    return train_loader, x_val_tensor, y_val_tensor
    
# x_train과 x_val은 Scaler 적용 후 Numpy Array  /  y_train과 y_val은 Pandas Series    
# y_train.values 와 y_val.values 는 왜 values 를 붙이는 걸까? Series -> Array로 변환
# .view(-1, 1)의 의미는 N행, 1열 형태로 변환한다는 뜻.
# -1(자동 계산): 이 차원의 크기는 전체 요소 개수(N)와 다른 차원의 크기를 고려해서 알아서 자동으로 계산해줘
# 1(고정 크기): 열(Column)의 개수를 1개로 고정

 

       - 손실 함수 : BCELoss   /   y = -log x

          ✔︎ y = 1인 경우 오차를 다음과 같이 변환

            - 예측값(ŷ)이 1에 가까울수록 → 오차는 0에 가까워지도록

            - 예측값(ŷ)이 0에 가까울수록 → 오차는 ∞에 가까워지도록

          ✔︎ y = 0인 경우 오차를 다음과 같이 변환

            - 예측값(ŷ)이 0에 가까울수록 → 오차는 0에 가까워지도록

            - 예측값(ŷ)이 1에 가까울수록 → 오차는 ∞에 가까워지도록

 

          ✔︎ 이 오차들의 평균

            - Binary Cross Entropy

            - PyTorch 제공 함수 : nn.BCELoss

 

 < 분류 모델링 2 >

- 다중 분류 모델 구조

    - Node 수 : 다중 분류 모델에서 Output Layer의 node 수는 y의 범주 수(클래스의 수)와 같습니다.

    - Softmax : 각 class 별(Output Node)로 예측한 값을, 하나의 확률 값으로 변환.

       ➣ 손실함수 내부에 Softmax 연산이 들어있어서 출력층에 활성화 함수를 안쓴다!!

 

요약하자면...

  손실함수 y.shape pred.shape
회귀 MSELoss (batch_size, 1)
예) (32, 1)
(batch_size, 1)
이진 BCELoss (batch_size, 1)
예) (32, 1)
(batch_size, 1)
다중 CrossEntropyLoss (batch_size, )
예) [32]
(batch_size, n_Class)