머신러닝 & 딥러닝

[딥러닝] 5. 오차함수 (Error Function)

김초송 2023. 5. 1. 16:14
  1. 오차함수
    • 오차함수에 정답 데이터와 예측 데이터를 넣어서 오차가 어떻게 되는지 확인
    • 정답과 예측값과의 오차 최소화
  2. 미니배치
  3. 수치미분
    • 오차함수의 기울기를 구해서 가중치를 갱신

 

오차함수

  1. 교차 엔트로피 오차함수 (Cross Entropy Error) : 분류
  2. 평균 제곱 오차함수 (Mean Squared Error) : 수치 예측 (회귀)

 

교차 엔트로피 오차함수

def cross_entropy_error(y, t):
    delta = 0.0000001
    return -np.sum(t * np.log(y + delta))
  • t : 정답, y : 예측값
  • delta (아주 작은 값) 을 더하는 이유?
    y = 0 이면 -∞ 가 되기 때문에
  • 0 에 가깝게 업데이트
# tensorflow cross entropy
model = Sequential()
model.add(Dense(3, input_shape=(2, ), activation='relu'))
model.add(Dense(3, activation='relu'))
model.add(Dense(2, activation='softmax'))
model.compile(optimizer=Adam(), loss='categorical_crossentropy', metrics=['acc'])
model.fit(x, y, epochs=50)

 

평균 제곱 오차함수

  • 분류 -> 교차 엔트로피 오차함수
    회귀 -> 평균 제곱 오차함수
  • 증권사 로보어드바이저, 보스턴 집값 예측, 콘크리트 강도 예측 등 
def mean_squared_error(y, t):
    return 0.5 * np.sum((y - t)**2)

보스턴 집값 예측 실습

from tensorflow.keras.datasets.boston_housing import load_data
(x_train, y_train), (x_test, y_test) = load_data(path='boton_housing.npz', test_split=0.2, seed=777)

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
import tensorflow as tf
tf.random.set_seed(777)

model = Sequential()
model.add(Dense(64, activation='relu', input_shape=(13, ))) # 은닉 1층
model.add(Dense(32, activation='relu')) # 은닉 2층
model.add(Dense(1)) # 출력층

model.compile(optimizer='adam', loss='mse', metrics=['mae']) # 정확도가 아닌 오차

model.fit(x_train, y_train, epochs=100)

result = model.predict(x_test)
result

# 모델 평가
np.corrcoef(result.flatten(), y_test)
  • flatten() : 1차원으로 만드는 함수