DL之NN:基于(sklearn自带手写数字图片识别数据集)+自定义NN类(三层64→100→10)实现97.5%准确率
目录
- DL之NN:基于sklearn自带手写数字图片识别数据集+自定义NN类(三层64→100→10)实现97.5%准确率
- 输入64+1(偏置)个神经元,隐藏层神经元个数可以自定义,输出层10个神经元
- import numpy as np
- from sklearn.datasets import load_digits sklearn自带数据集
- from sklearn.metrics import confusion_matrix, classification_report
- from sklearn.preprocessing import LabelBinarizer 标签二值化
- from sklearn.cross_validation import train_test_split 将数据切分分训练数据和测试数据
- import matplotlib.pyplot as plt
-
-
- def sigmoid(x):
- return 1/(1+np.exp(-x))
- def dsigmoid(x):
- return x*(1-x)
-
- ……
-
-
- def predict(self,x): 预测函数,也需要先添加偏置
- 添加偏置,最初的数据64上需额外加入偏置列
- temp=np.ones(x.shape[0]+1)
- temp[0:-1]=x 该矩阵的0列到-1列
- x=temp 通过转换行没有变,但是多了一列
- x=np.atleast_2d(x) 转为2维数据
-
- L1=sigmoid(np.dot(x,self.V)) 隐藏层输出
- L2=sigmoid(np.dot(L1,self.W)) 输出层输出
- return L2
-
- digits = load_digits() 下载数据集
- X = digits.data 输入数据
- y = digits.target 标签
- 输入数据归一化:把最初的数据都变为[0~1]之间的数据
- X -= X.min()
- X /= X.max()
- nn = NeuralNetwork([64, 100, 10]) 构建神经网络,神经元个数
- X_train, X_test, y_train, y_test = train_test_split(X, y) 分割数据,75%为训练25%为测试
-
- 对标签二值化,将输出变为神经网络的风格:比如若输出3→0001000000
- labels_train = LabelBinarizer().fit_transform(y_train)
- labels_test = LabelBinarizer().fit_transform(y_test)
-
- print ("start")
- nn.train(X_train, labels_train, epochs=30000)
- print ("over")
相关文章
gitHub
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
加入交流群
请使用微信扫一扫!