DL之NN:基于(sklearn自带手写数字图片识别数据集)+自定义NN类(三层64→100→10)实现97.5%准确率

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

(0)

相关推荐