python人工神经网络

人工神经网络在模块keras中,实现步骤如下:

#bp人工神经网络的实现

#1、读取数据

#2、导入对应模块,keras.models  Sequential(建立模型)  |keras.layers.core Dense(建立层)  Activation

#3、Sequential建立模型

#4、Dense建立层

#5、Activation激活函数

#6、compile模型编译

#7、fit(训练)学习

#8、验证(测试,分类预测)

使用人工神经网络实现课程销量的预测

#数据读取与整理
import pandas as pda
import numpy
fname='E:/programCode/lesson.csv'
dataf=pda.read_csv(fname)
x=dataf.iloc[:,1:5].as_matrix()#iloc[:,1:5]提取所有行,1到4列
y=dataf.iloc[:,5].as_matrix()
for i in range(0,len(x)):
    for j in range(0,len(x[i])):
        thisdata=x[i][j]
        if(thisdata=='是' or thisdata=='高' or thisdata=='多'):
            x[i][j]=int(1)
        else:
            x[i][j]=-1

for i in range(0,len(y)):
    thisdata=y[i]
    if(thisdata=='高'):
        y[i]=1
    else:
        y[i]=-1

#容易错的地方:直接输入x,y训练
#正确的做法:转化好格式,将x,y转化为数据框,然后在转换为数组并指定格式
xf=pda.DataFrame(x)
yf=pda.DataFrame(y)

x2=xf.as_matrix().astype(int)
y2=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=len(x2[0])))#10代表输入层节点个数,input_dim代表多少特征
model.add(Activation('relu'))#激活函数
#输出层
model.add(Dense(1,input_dim=1))
model.add(Activation('sigmoid'))
#模型的编译
model.compile(loss='binary_crossentropy',optimizer='adam')#loss损失函数,optimizer求解方法,class_mode指定模式
#训练
model.fit(x2,y2,nb_epoch=1000,batch_size=100)#nb_epoch指定学习的次数,batch_size指定p的大小
#预测分类
rst=model.predict_classes(x).reshape(len(x))
print(rst)

人工神经网络实现手写体数字识别

#数据读取与整理
#加载数据
import numpy  
import operator
from os import listdir
import pandas as pda
def datatoarray(fname):
    arr=[]
    fh=open(fname)
    #因为图片文本是32乘32的,将每一个像素点的值都放入一个长度为1024的列表中
    for i in range(0,32):
        thisline=fh.readline()
        for j in range(0,32):
            arr.append(int(thisline[j]))
    return arr

#取文件的前缀
def seplabel(fname):
    filestr=fname.split('.')[0]
    label=int(filestr.split('-')[0])
    #print(label)
    return label

#建立训练数据
def traindata():
    labels=[]
    tranfile=listdir('E:/programCode/手写数字识别实验')#listdir()得到所有的文件名
    num=len(tranfile)
    #行的长度1024,每一行存储一个文件
    #用一个数组存储所有训练数据,行:文件总数,列:1024
    trainarr=numpy.zeros((num,1024))
    for i in range(0,num):
        thisfname=tranfile[i]
        thislabel=seplabel(thisfname)
        labels.append(thislabel)
        trainarr[i,:]=datatoarray('E:/programCode/手写数字识别实验/'+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=len(tx2[0])))#10代表输入层节点个数,input_dim代表多少特征
model.add(Activation('relu'))#激活函数
#输出层
model.add(Dense(1,input_dim=1))
model.add(Activation('sigmoid'))
#模型的编译
model.compile(loss='mean_squared_error',optimizer='adam')#loss损失函数,optimizer求解方法,class_mode指定模式
#训练
model.fit(tx2,ty2,nb_epoch=1000,batch_size=6)#nb_epoch指定学习的次数,batch_size指定p的大小
#预测分类
rst=model.predict_classes(tx2).reshape(len(tx2))
print(rst)

猜你喜欢

转载自blog.csdn.net/xx20cw/article/details/84888081