4 神经网络-正向反馈机制

实验目的

本次实验是从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

转载原创链接

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。