Python深度学习--简易版数字识别系统

准备条件:

1.安装sys,os,numpy,matplotlib,opencv库组

2.下载训练数据mnist

下载地址:

链接:https://pan.baidu.com/s/1SMeGhW0SVYc7audg2Q1kJA?pwd=1aru 
提取码:1aru

下载好后,把里面的dataset文件放到本项目文件同一路径下。就OK啦

准备就绪!开搞!!!

实现代码

#项目实操---数字识别系统
##### from locale import normalize
import sys,os
sys.path.append(os.pardir)
from dataset.mnist import load_mnist
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
import pickle
import math
import cv2

#------------------WAY-------------------------

def ReLU (x):#ReLU函数,输入大于0时,直接返回该值,小于0时,则返回0.
    return np.maximum(0,x)

def sigmoid(x):#sigmoid函数,对输入进行1/(1+exp(-x))运算,并返回该值
    return 1/(1+np.exp(-x))

def setp_function(x):#阶跃函数,输入大于0,返回1,小于0,返回0.适用np数组,可以直接传入数组
    y = x > 0
    return y.astype(np.int)

def identity_function(x):#恒等函数
    return X

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 get_data():
    (x_train,t_train),(x_test,t_test) = load_mnist(flatten = True,normalize = True,one_hot_label = False)
    return x_test,t_test
  
def init_network():
    with open("D:\B___C\python工程\explore\【源代码】深度学习入门:基于Python的理论与实现\【源代码】深度学习入门:基于Python的理论与实现\ch03\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
def img_show(img):
    pil_img = Image.fromarray(np.uint8(img))
    pil_img.show()
    
def mean_squared_error(y,t):#均方误差函数
    return  0.5 * np.sum((y-t)**2)

def f_cross_entropy_error(y,t):#标准版交叉熵误差函数
    delte = math.exp(-7)
    return -np.sum(t * np.log(y+delte))

def cross_entropy_error1(y,t):#one_hot的交叉熵误差函数
    delte = math.exp(-7)
    if(y.ndim == 1):
        t = t.reshape(1,t.size)
        y = y.reshape(1,y.size)
    batch_size = y.shape[0]
    return -np.sum(t * np.log(y + delte))/batch_size
    

def cross_entropy_error2(y,t):#标签的交叉熵误差函数
    delte = math.exp(-7)
    if(y.ndim == 1):
        t = t.reshape(1,t.size)
        y = y.reshape(1,y.size)
    batch_size = y.shape[0]
    return -np.sum(t * np.log(y[np.arrange(batch_size),t] + delte))/batch_size
    
def img_show(img):#数组转换为图片,并显示
    pil_img = Image.fromarray(np.uint8(img))
    pil_img.show()
    
def img_transform(img):#图片转换为数组
    img_array = np.asarray(img)
    return img_array

#----------------CODE-------------------------------

network = init_network()

img_raw = cv2.imread(r"需要识别的照片路径")#注意,所识别照片的规格必须是28*28像素,且为黑底白字
img_gray = cv2.cvtColor(img_raw,cv2.COLOR_BGR2GRAY)
plt.imshow(img_gray)
x = img_transform(img_gray)
x = x.reshape(784)


y = predict(network,x)
p = np.argmax(y)
print(y)
print("数字识别结果为{}".format(p))


结果展示:

Python深度学习--简易版数字识别系统_第1张图片

Python深度学习--简易版数字识别系统_第2张图片

Python深度学习--简易版数字识别系统_第3张图片

 Python深度学习--简易版数字识别系统_第4张图片

 

由于本系统直接采用了现成的矩阵参数,所以整体体量相对较小,且更容易理解。

如果大家对代码仍有不理解的地方,可以私聊我,大家一起学习进步!!

 

 

你可能感兴趣的:(Python,深度学习,人工智能,python,深度学习,人工智能)