def cross_entropy(y_pred, y_true): if y_pred.ndim == 1: # 데이터 개수 1개 ce = _cross_entropy(y_pred, y_true) elif y_pred.ndim == 2: ce = _cross_entropy(y_pred, y_true) / len(y_pred) return ce if __name__ == '__main__': (X_train, y_train), (X_test, y_test) = load_mnist(one_hot_label=True) y_true = y_test[:10] X_true = X_test[:10] with open('../ch03/sample_weight.pkl', 'rb') as f: network = pickle.load(f) y_pred = forward(network, X_true) # 원본과 예측이 같은 경우 print('y_true[0]:', y_true[0]) # 숫자 7 이미지 print('y_pred[0]:', y_pred[0]) # 7 이미지가 될 확률이 가장 큼 print('ce:', cross_entropy(y_pred[0], y_true[0])) # 0.00293918838724494 # 원본과 예측이 다른 경우 print('y_true[8]:', y_true[8]) # 숫자 5 이미지 print('y_pred[8]:', y_pred[8]) # 6 이미지가 될 확률이 가장 큼 print('ce:', cross_entropy(y_pred[8], y_true[8])) # 4.909424304962158 print('2차원 ce:', cross_entropy(y_pred, y_true)) # 0.5206955424044282 # 만약 y_true 또는 y_pred가 one-hot encoding이 사용되지 않으면, # one-hot encoding 형태로 변환해서 cross-entropy 계산 np.random.seed(1227)
elif y_pred.ndim == 2: ce = _cross_entropy(y_pred, y_true) / len(y_pred) return ce if __name__ == '__main__': (X_train, y_train), (X_test, y_test) = load_mnist(one_hot_label=True) y_true = y_test[:10] print('y_true:', y_true) with open('../ch03/sample_weight.pkl', 'rb') as file: network = pickle.load(file) y_pred = forward(network, X_test[:10]) print('y_true[0]:', y_true[0]) print('y_pred[0]:', y_pred[0]) print('ce =', cross_entropy(y_pred[0], y_true[0])) print('y_true[8]:', y_true[8]) # 숫자 5 이미지 print('y_pred[8]:', y_pred[8]) # 숫자 6 일 확률이 가장 큼 # 실제 값과 예측 값이 다른 경우 print('ce =', cross_entropy(y_pred[8], y_true[8])) print('ce 평균 =', cross_entropy(y_pred[8], y_true[8])) # y_true 또는 y_pred가 one-hot-encoding이 사용되어 있지 않으면, # one-hot-encoding 형태로 변환해서 Cross-Entropy를 계산한다. np.random.seed(1227) y_true = np.random.randint(10, size=10)
import numpy as np from ch03.ex11 import forward from dataset.mnist import load_mnist if __name__ == '__main__': (X_train, y_train), (X_test, y_test) = load_mnist(one_hot_label=True) X_true = X_test[:10] y_true = y_test[:10] print('y_true:', y_true[0]) print('X_true:', X_true[0]) with open('../ch03/sample_weight.pkl', 'rb') as f: network = pickle.load(f) y_pred = forward(network, X_true) # (10, 10) print('y_pred:', y_pred) print(y_true[0]) print(y_pred[0]) error = y_pred[0] - y_true[0] print(error) print(error**2) print(np.sum(error**2)) print('y_true[8] :', y_true[8]) # [:10]까지 중 틀린 인덱스 : 8 print('y_pred[8] :', y_pred[8]) print(np.sum( (y_true[8] - y_pred[8])**2)) # 1.888963693926786 -> 이 값을 줄이는 것이 좋음