카테고리 없음
[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) 지문인식 모델
정리
Binary classification의 특징 리뷰
1. Dataset의 label은 0과 1로 이루어져있음 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}")