实验目的
本次实验是从5000* 400 数据,行代表了每张照片,而列代表了20*20像素灰色度的值。每张照片表示了一个手写的数字,我们的神经网络模型,就是通过计算,学会去识别每张照片的数字是多少。
数据显示.png
实验原理
image
首先这里实验已经给好了我们需要的input Layer数据,已经训练好的的权值,我们需要做的就是计算这个三层神经网络。得到我们的输出值,那么输出层怎么表示,我们的预测数字的值呢(这里的输出层有10个结点,每个节点输出0或者1比如(0000010000表示预测数字6,)1位于位置是6下标是5的位置上,我们把下标5加1就可以表示6了,类似可以表示其他数字,0则在10的位置上。0由10表示。
实验流程:
1、加载数据
2、写入假设函数以及公式代入数据
3、计算准确率
#1、加载数据
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.io import loadmat
from scipy.optimize import minimize
from sklearn.metrics import classification_report
def load_data(path):
data=loadmat(path)
X=data['X']
y=data['y']
return X,y
def load_weight(path):
data=loadmat(path)
return data['Theta1'],data['Theta2']
theta1,theta2=load_weight('DATA\ex3weights.mat') #(25,401) #(10,26)
X,y=load_data('DATA\ex3data1.mat')
#展开数组成扁平型
y=y.flatten()
#加入偏置项 1
X=np.insert(X,0,values=np.ones(X.shape[0]),axis=1) #X(5000,401)
# 2、写入假设函数以及公式代入数据
def sigmoid(z):
return 1/(1+np.exp(-1*z))
X=np.insert(X,0,values=np.ones(X.shape[0]),axis=1) #X(5000,401)
a1=X
z2=a1@theta1.T #z2 (5000,25)
z2=np.insert(z2,0,1,axis=1) #插入偏置项
a2=sigmoid(z2) #a2 (5000,26)
z3=a2@theta2.T
a3=sigmoid(z3)
y_pred=np.argmax(a3,axis=1)+1
#3、计算准确率
def accuracy(y):
h =a3
y_pred=np.argmax(h,axis=1)+1 #返回沿列最大的索引值加1
print(classification_report(y,y_pred))
accuracy(y)
实验结果
图片.png