카테고리 없음

[Deep Learning] LOSS FUNCTIONSMODEL’S

standingR 2023. 11. 10. 18:48

 

 

LOSS FUNCTIONSMODEL 

 

1. 모델 설명 

 

 

1-1 . 기본 shape

 

 

 

모델에 x 입력, 여러 레이러를 거쳐 최중 출력  ŷ를 만듦

binary classification 이라면  ŷ ∈ (0, 1) 즉 확률값을 출력

 

 

 

ex) Touch ID

-

 

 x 

지문 인식 센서의 데이터 

 

model 

지문

ŷ

사용자로예측 →ŷ≈1           사용자가아닌것으로예측 →ŷ≈0

 

 

 

1-2 . 실제 shape

 

           

 

- Loss = 모델의 예측 ŷ 과 실제 정답 y의 차이

- Loss Function = Loss를 계산하는 함수

- loss값은 parameter를 학습할 때 사용됨

 

ex) 지문인식 모델

 

양정은 T - 수업자료

 

 

정리 

Binary classification의 특징 리뷰

1. Datasetlabel01로 이루어져있음 2. Model은 확률값을 출력

 

Loss Function 리뷰 정답(y)과 모델의 출력(y)̂ 이 비슷하면 J 0,

차이가 크면 J → ∞

 

 

2. Binary Cross Entropy 공식

 

출처 : 양정은 강사님 수업자료 발췌

 

2 - 1 . 코드를 통한 구현 

 

Binary Cross Entropy 구현

 

기존 코드 

import numpy as np

# ^y 의 경우 그자체가 예측값이므로 pred라고 표현한다.

class Binary_Cross_Entropy:
    def __init__(self,y,pred):
        self.y = y
        self.pred = pred
        tmp = self.y * np.log(self.pred) + (1-self.y)*np.log(1-self.pred)   
    
    def print_BCE(self,tmp):
        print(tmp)

 

수정 코드

import numpy as np

# ^y 의 경우 그자체가 예측값이므로 pred라고 표현한다.

class Binary_Cross_Entropy:
    def forward(self,y,pred):
        self.y = y
        self.pred = pred
# tmp 대신 J 가 들어간 이유 Lossfunction의 최종값을 J로 표현하기 떄문에 변수 J로
        J = self.y * np.log(self.pred) + (1-self.y)*np.log(1-self.pred)
# J의 값을 반환 하기 위한 return 값 생성
        return J

# 객체 생성
loss_function = Binary_Cross_Entropy()

# input 값 생성
J = loss_function.forward(y=0, pred=0.3)
print(f"y = 0, pred = 0.3 -> J = {J:.4f}")



"""
.4f는 포맷 문자열에서 소수점 이하 숫자를 얼마나 표시할 것인지를 나타냅니다.
여기서 J는 어떤 값인지 정확히는 알 수 없지만, 
.4f는 소수점 이하 4자리까지 표시하라는 의미입니다. 
즉, J의 값이 소수점 이하 4자리까지 표시되도록 형식화됩니다.

예를 들어, 만약 J의 값이 0.12345678이라면 
출력은 "y = 0, pred = 0.3 -> J = 0.1235"가 될 것입니다. 
소수점 이하 4자리까지만 표시되었습니다.
"""

 

commit : 기존에 내 코드에서는 한번에 __init__으로 해결해서, forward의 개념을 제대로 못 담은것 같다,
강사님 코드를 참고하여 재구현 

 

 

Binary Cross Entropy 구현하기 2

 

조건 preds = np.arange(start=0.1, stop=1, step=0.1)

 

import numpy as np

# ^y 의 경우 그자체가 예측값이므로 pred라고 표현한다.

class Binary_Cross_Entropy:
    def forward(self,y,pred):
        self.y = y
        self.pred = pred
# tmp 대신 J 가 들어간 이유 Lossfunction의 최종값을 J로 표현하기 떄문에 변수 J로
        J = self.y * np.log(self.pred) + (1-self.y)*np.log(1-self.pred)
# J의 값을 반환 하기 위한 return 값 생성
        return J

# 객체 생성
loss_function = Binary_Cross_Entropy()

preds = np. arange(start=0.1, stop=1, step=0.1)

print("{Case.1} y = 0")
for pred in preds:
    J = loss_function.forward(y=0, pred=pred)
    print(f"{pred = :.1f} -> {J = :4f}")

print("{\Case.2} y = 0")
for pred in preds:
    J = loss_function.forward(y=1, pred=pred)
    print(f"{pred = :.1f} -> {J = :4f}")