파이썬을 이용한 뉴럴 네트워크 실전 - 코딩
▶순전파
1. 시그모이드, 소프트맥스 함수 그리고
2. mnist 에서 시험이미지와 시험레이블을, 그리고
3. pkl 파일에서 weight factor 와 bias값을 불러와서
주어진 weight 그리고 bias 값을 이용하여 순전파를 사용해 시험레이블을 얼마만큼의 정확도를 가지는지 맞추는 함수 이다.
----------------------------------------------------------------------------------
# coding: utf-8
import sys, os # 시스템 그리고 os와 상호작용할 수 있는 여러가지 함수를 불러온다.
sys.path.append(os.pardir) # 부모 디렉터리(데이터셋 폴더)의 파일을 가져올 수 있도록
import numpy as np # 넘파이 불러오기
import pickle # 프로그램 실행중에 특정 객체를 파일로 저장할 수 있게 만들어 주는 기능
from dataset.mnist import load_mnist #mnist.py 내부에서 load_mnist 함수를 improt한다.
from common.functions import sigmoid, softmax # 커몬펑션에서 시그모이드와 소프트 맥스 임포트 한다.
def get_data(): # 읽어온 MNIST 데이터를 (훈련이미지), (시험이미지) 형태로 반환한다.
(x_train, t_train), (x_test, t_test) = load_mnist(normalize=True, flatten=True, one_hot_label=False)
# 인수로 3가지 설정
# 1. 노말라이즈 할 것 인가.
# 2. 입력 이미지를 1차원 (배열)으로 만들 것 인가(True) 1x28x28의 3차원 배열(그림)로 만들것 인가(False)
# 3. 원-핫 인코딩 할 것 인가.
# !읽어온 데이터에는 이미지 파일을 픽셀화 한 값이 존재한다!
# print(x_test)
return x_test, t_test # 훈련이미지는 필요 x, 실험이미지만 반환하면 된다.
def init_network():
with open("sample_weight.pkl", 'rb') as f:
network = pickle.load(f)
# !읽어온 데이터에는 Weight factor 그리고 바이스 값이 딕셔너리 변수로 저장되어 있다!
return network
def predict(network, x): # w와 b를 이용해 값을 구하고 소프트 맥스 함수로 저장하는 코드
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
x, t = get_data() # 이미지 파일 픽셀화 불러오기, x=x_test(x의 시험이미지), t=t_test(t는 시험레이블)
network = init_network() # Weighting factor & Bias 불러오기 network = y (0~9 구분한 아웃풋값)
#print(x.shape)
#print(t.shape)
# 아래 부터는 배치문이다. 배치문이란, 100개씩 묶어서 처리하면 빠르므로 묶어서 처리하는 방법이다
# 100이라는 수는 임의의 수 이다. (1을 입력할 시 계산속도가 느려지는 것을 확인할 수 있다.)
batch_size = 100 # 배치 크기
accuracy_cnt = 0
print("Accuracy:" + str(float(accuracy_cnt) / len(x)))