python人工神經網路
阿新 • • 發佈:2018-12-08
人工神經網路在模組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)