# _*_ coding:UTF-8 _*_
# 开发工具:PyCharm
"""
手写数字的识别
利用书中所给的脚本文件,我已经上传到了CSDN的资源中,免费下载
前向传播:假设神经网络已经训练完毕,此时我们将一个数据输入并进行判断,这个就是“推理”的过程
这个过程也称为“前向传播”
"""
import pickle
import sys, os
import numpy as np
sys.path.append(os.pardir)
from dataset.mnist import load_mnist
from PIL import Image
# 第一次下载会用点时间
# (训练图像,训练标签(tag_train)),(测试,测试标签)
(x_train, t_train), (x_test, t_test) = load_mnist(flatten=True, normalize=False)
# 输出各个数据形状
print(x_train.shape)
print(t_train.shape)
print(x_test.shape)
print(t_test.shape)
# 输出如下
# (60000, 784)
# (60000,)
# (10000, 784)
# (10000,)
def img_show(img):
pil_img = Image.fromarray(np.uint8(img))
pil_img.show()
img = x_train[0]
label = t_train[0] # 获得对应标签
img = img.reshape(28, 28) # 把图片变为原来尺寸,一开始读入的时候进行了一维展开
img_show(img) # 显示为5
"""下面进行神经网络的推理"""
"""
由于输出为0~9,十个数字,那么便有十个输出神经元
输入神经元为784个,28*28
此外,这个神经网络有两个隐藏层,分别为50/100个神经元,这个可以自己随意设置
但是由于之后用到的是已经训练好的权值和偏置,就设置成这样
"""
def sigmoid(x):
"""
sigmoid激活函数
:param x: list[int]
:return: list[int]
"""
return 1.0 / (1 + np.exp(-x))
def softmax(a):
c = np.max(a) # 防止溢出,比如e的100次方就是一个很大的数了,具体数学论证请看书上内容
exp_a = np.exp(a - c)
sum_exp_a = np.sum(exp_a)
y = exp_a / sum_exp_a
return y
def get_data():
(x_train, t_train), (x_test, t_test) = load_mnist(flatten=True, normalize=False)
return x_test, t_test
def init_network():
"""返回权重和偏置"""
with open(r"sample_weight.pkl", "rb") as f: # 假设已经训练好了,现在进行测试
network = pickle.load(f)
return network
def predict(network: dict, 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 # 第0层到第一层
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()
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
print("Accuracy:" + str(float(accuracy_cnt) / len(x)))
# 我这边测试时显示精度为92.07%,书上显示为93.52%
深度学习入门(基于python实现)--第三章 神经网络 03
最新推荐文章于 2021-05-07 22:31:43 发布