人工神经网络(ANN)BP算法应用(手写体数字识别部分代码)

人工神经网络在热门的人工智能领域有着很多很好的应用。

在网上也有很多优秀的文章阐述人工神经网络的原理和应用,可以参考以下优秀的文章。

https://blog.csdn.net/leiting_imecas/article/details/60463897

https://blog.csdn.net/sinat_36171246/article/details/71056454?locationNum=1&fps=1

https://www.jianshu.com/p/f69e16df2623

在应用上,python利用keras和TensorFlow可以完成人工神经网络的模型建立和使用。

BP人工神经网络实现预测(分类)的基本过程如下:

1、读取数据
2、keras.models Sequential  和  keras.layers.core Dense  Activation  模块使用
3、Sequential建立模型
4、Dense建立层
5、Activation 激活函数
6、compile模型编译
7、fit训练(学习)
8、验证预测

实现部分,首先准备数据,将数据处理为规定类型。

利用BP人工神经网络模型实现代码如下:

#使用人工神经网络模型
from keras.models import Sequential
from keras.layers.core import Dense,Activation
model=Sequential()
#输入层
model.add(Dense(10,input_dim=len(x2[0]))) #input_dim  特征数
model.add(Activation("relu"))
#输出层
model.add(Dense(1,input_dim=1))
model.add(Activation("sigmoid"))
#模型的编译
model.compile(loss="binary_crossentropy",optimizer="adam",class_mode="binary") #损失函数
#训练
model.fit(x2,y2,nb_epoch=200,batch_size=100)  #训练次数epoch  p大小,调整准确率
#预测分类
rst=model.predict_classes(x).reshape(len(x))
  • 利用BP人工神经网络实现手写体数字识别;
    #数据的读取与整理
    #加载数据
    def datatoarray(fname):
        arr=[]
        fh=open(fname)
        for i in range(0,32):
            thisline=fh.readline()
            for j in range(0 , 32):
                arr.append(int(thisline[j]))
        return arr
    #建立一个函数取出labels
    def seplabel(fname):
        filestr=fname.split(".")[0]
        label=int(filestr.split("_")[0])
        return label
    #建立训练数据
    def traindata():
        labels=[]
        trainfile=os.listdir("./traindata")
        num=len(trainfile)
        trainarr=npy.zeros((num,1024))
        for i in range(num):
            thisfname=trainfile[i]
            thislabel=seplabel(thisfname)
            labels.append(thislabel)
            trainarr[i,]=datatoarray("./traindata/"+thisfname)
        return trainarr,labels
    trainarr,labels=traindata()
    xf=pda.DataFrame(trainarr)
    yf=pda.DataFrame(labels)
    tx2=xf.as_matrix().astype(int)
    ty2=yf.as_matrix().astype(int)
    #使用人工神经网络模型
    from keras.models import Sequential
    from keras.layers.core import Dense,Activation
    model=Sequential()
    #输入层
    model.add(Dense(10,input_dim=1024))
    model.add(Activation("relu"))
    #输出层
    model.add(Dense(1,input_dim=1))
    model.add(Activation("sigmoid"))
    #模型的编译
    model.compile(loss="mean_squared_error",optimizer="adam")
    #训练
    model.fit(tx2,ty2,nb_epoch=10000,batch_size=6)
    #预测分类
    #根据上述训练数据一样,可将测试数据相同处理后利用predict——classes方法预测分类

     

posted @ 2018-07-18 21:12  HeCCXX  阅读(605)  评论(0编辑  收藏  举报