コード例 #1
0
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)
コード例 #2
0
    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)
コード例 #3
0
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  -> 이 값을 줄이는 것이 좋음