▼ 下記ページを理解していること。
[Python] [5] MNISTのダウンロード方法 (手書き数字画像セットを取込む)
▼ Python3.6、NumPyがインストールされていること。
このページでは、venvの仮想環境(Python3.6)上にNumPyをインストールした環境で、Python対話モード(Pythonインタプリタ)にて実装サンプルを記載している。
※ Python対話モード、NumPyについては下記を参考。
Python対話モード:[Python] 対話モード (インタプリタ) の使用方法
NumPy:[Python] [NumPy] インストールとnumpy.ndarrayの使用方法
▼ ニューロン構成について
入力層:784個 ※ 画像データ28 x 28 = 784 (ピクセル数)
隠れ層1: 50 ※ 任意の値
隠れ層2:100 ※ 任意の値
出力層:10 ※ 数字 0 ~ 9 の 10 クラス
import sys, os
sys.path.append(os.pardir) # 親ディレクトリのファイルをインポートするための設定
import numpy as np
import pickle
from dataset.mnist import load_mnist
from common.functions import sigmoid, softmax
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):
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() # … (1)
network = init_network() # … (2)
accuracy_cnt = 0
for i in range(len(x)): # … (3)
y = predict(network, x[i]) # … (4)
p= np.argmax(y) # … (5)
if p == t[i]: # … (6)
accuracy_cnt += 1 # … (7)
print("Accuracy:" + str(float(accuracy_cnt) / len(x))) # … (8)
[ 0.2, 0.1, 0.04 , … , 0.05 ] # 0 ~ 9 それぞれの確率 (20%, 10%, 4%, … , 5%)
$ cd gitlocalrep
$ cd deep-learning-from-scratch/ch03
$ source /var/www/vops/bin/activate
$ python neuralnet_mnist.py
Accuracy:0.9352