신경망의 추론 처리

AI / / 2020. 10. 26. 21:06
728x90
반응형

MNIST 데이터셋을 가지고 추론을 수행하는 신경망을 구성

신경망은 입력층 뉴런을 784개 - 이미지의 크기가 28 * 28 = 784

출력층 뉴런을 10개 -  0에서 9까지의 손글씨 숫자라서

 

코드

import pickle
import sys,os
sys.path.append(os.pardir)
from mnist import load_mnist
import numpy as np

def softmax(a):
    c = np.max(a)
    exp_a = np.exp(a - c) # 오버플로 대책
    sum_exp_a = np.sum(exp_a)
    y = exp_a / sum_exp_a
    return y


def sigmoid(x):
    return 1/(1+np.exp(-x)) # 시그모이드 수식v

def get_data():
    (x_train, t_train),(x_test, t_test) =\
        load_mnist(normalize=True, flatten = True, one_hot_label = False)
    return x_test, t_test


def init_network():
    with open("sample_weight.pkl",'rb') as f:
        network = pickle.load(f)
    return network
    
def predict(network, x):  # predict 함수는 각 레이블의 확률을 넘파이 배열로 반환한다. 
    W1, W2, W3 = network['W1'], network['W2'], network['W3']
    b1, b2, b3 = network['b1'], network['b2'], network['b3']
    
    a1 = np.dot(x, W1) + b1
    z1 = sigmoid(a1)
    a2 = np.dot(z1, W2) + b2
    z2 = sigmoid(a2)
    a3 = np.dot(z2, W3) + b3
    y = softmax(a3)
    
    return y
# 0일 확률이 0.1 1일 확률이 0.3 이런 식으로 해석한다. 
    
    
x, t = get_data()
network = init_network()

accuracy_cnt = 0

for i in range(len(x)):
    y = predict(network, x[i])
    p = np.argmax(y) # 확률이 가장 높은 원소의 인덱스를 얻는다.
    if p == t[i]:
        accuracy_cnt += 1 #  신경망이 예측한 답변과 정답 레이블을 비교해 맞힌 숫자(accuaracy_cnt)를 세고, 이를 전체 이미지 숫자로 나눠 정확도를 구한다.

print("Accuracy:" + str(float(accuracy_cnt)/ len(x)))

[그림1] 신경망 추론 결과 

** 데이터를 특정 범위로 변화하는 처리 - 정규화 

  • normalize - True - ~255 범위인 각 픽셀의 값을 0.0~1.0 범위로 변환(단순한 픽셀의 값을 255로 나눈다.)

신경망의 입력 데이터에 특정 변환을 가하는 것을 전처리

 

x, t = get_data()
network = init_network()

batch_size = 100 # 배치 크기
acuaracy_cnt = 0


for i in range(0, len(x), batch_size):
    x_batch = x[i:i+batch_size]
    y_batch = predict(network, x_batch)
    p = np.argmax(y_batch, axis=1)
    accuracy_cnt+= np.sum(p == t[i:i+batch_size])
    

print("Accuracy : " + str(float(accuracy_cnt) / len(x)))

[그림2] 

 

 

 

 

출처 : 밑바닥부터 시작하는 딥러닝

https://www.hanbit.co.kr/store/books/look.php?p_code=B8475831198

 

밑바닥부터 시작하는 딥러닝

직접 구현하고 움직여보며 익히는 가장 쉬운 딥러닝 입문서

www.hanbit.co.kr

 

728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기