머신러닝 & 딥러닝
[딥러닝] 5. 오차함수 (Error Function)
김초송
2023. 5. 1. 16:14
- 오차함수
- 오차함수에 정답 데이터와 예측 데이터를 넣어서 오차가 어떻게 되는지 확인
- 정답과 예측값과의 오차 최소화
- 미니배치
- 수치미분
- 오차함수의 기울기를 구해서 가중치를 갱신
오차함수
- 교차 엔트로피 오차함수 (Cross Entropy Error) : 분류
- 평균 제곱 오차함수 (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차원으로 만드는 함수