人工神经网络在模块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)