《人工智能》課件第6章 人工神經網絡_第1頁
《人工智能》課件第6章 人工神經網絡_第2頁
《人工智能》課件第6章 人工神經網絡_第3頁
《人工智能》課件第6章 人工神經網絡_第4頁
《人工智能》課件第6章 人工神經網絡_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第6章人工神經網絡主要內容感知機多層感知機多層感知機的應用其他神經網絡感知機大腦與神經網絡感知機感知機模型1957年康奈爾大學的Rosenblatt提出了感知機的概念。感知機感知機模型激活函數(shù)感知機

感知機

感知機應用感知機(Perceptron)進行分類模型:Sklearn的感知機Perceptron類數(shù)據集:鳶尾花(Iris)數(shù)據集In[1]:fromsklearnimportdatasets...:importnumpyasnp...:iris=datasets.load_iris()...:X=iris.data[:,[0,1]]...:y=iris.target...:fromsklearn.model_selectionimporttrain_test_split...:X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=0)In[2]:foriinrange(0,10):...:print(X_train[i][0],X_train[i][1],y_train[i])...:感知機應用感知機(Perceptron)進行分類數(shù)據預處理建立感知機模型,并進行訓練和預測,訓練周期數(shù)取40,學習率取0.1。In[4]:sc=StandardScaler()...:sc.fit(X_train)...:X_train_std=sc.transform(X_train)...:X_test_std=sc.transform(X_test)...:print(sc.mean_,sc.var_)In[5]:ppn=Perceptron(n_iter=40,eta0=0.1,random_state=0)...:ppn.fit(X_train_std,y_train)

...:y_pred=ppn.predict(X_test_std)感知機局限性單個的感知機可以求解與、或問題,但是對于異或(XOR)問題卻無能為力。究其原因,感知機使用超平面區(qū)分正向類和負向類,如圖7-6的與和或問題,用一條直線即可將邏輯運算的結果分開,這屬于線性分類問題。但是,對于異或問題,屬于非線性分類問題,無法用一條直線將兩類結果分割開。多層感知機模型由多層人工神經元組成,每層包括多個神經元,層內的神經元之間沒有鏈接,層與層之間的神經元全連接,每一層神經元的輸出作為下一層的輸入。每個多層感知機有一個輸入層和一個輸出層,輸入層用來接收特征,輸出層用來輸出因變量的預測值。輸入層和輸出層之間可以有多個層,這些層用來表示潛在的變量,所以被稱之為隱含層,一個多層感知機中,可以有一到多個隱含層。是一個前饋網絡。多層感知機模型多層感知機

多層感知機BP算法——多層感知機的訓練BP算法是一種迭代算法,每次迭代由兩個步驟組成,即預測正向傳遞和誤差的反向傳播。在正向階段,特征從輸入開始按照前饋規(guī)則經各隱含層直至輸出層,完成一次預測,損失函數(shù)利用輸出來計算預測的誤差。反向傳播則是通過誤差從代價函數(shù)向輸入層傳播,估計每個神經元(或者權重)對誤差的貢獻,計算各權重的梯度,更新權重值,完成一次迭代。該過程持續(xù)迭代直至模型收斂。多層感知機BP算法示例一個三層感知機:激活函數(shù)采用Sigmoid函數(shù),參數(shù)估計采用梯度下降法;特征向量為[0.8,0.3],目標值為0.5,學習率設置為0.1。多層感知機BP算法示例正向傳遞

多層感知機

多層感知機的應用逼近XOR問題采用一個三層感知機,其中輸入層2個神經元,對應2個特征,隱含層2個神經元,輸出一個神經元,對應目標,采用Sigmoid函數(shù)作為每個神經元的激活函數(shù)。激活函數(shù)

importnumpyasnp#Soigmoid函數(shù)defsigmoid(x):return1.0/(1.0+np.exp(-x))

#sigmoid導函數(shù)性質:f'(t)=f(t)(1-f(t))#參數(shù)y采用sigmoid函數(shù)的返回值defsigmoid_prime(y):returny*(1.0-y)多層感知機的應用逼近XOR問題MLP類classMLP:def__init__(self,layers):""":參數(shù)layers:神經網絡的結構(輸入層-隱含層-輸出層包含的結點數(shù)列表)"""self.activation=sigmoidself.activation_prime=sigmoid_prime#存儲權值矩陣

self.weights=[]#rangeofweightvalues(-1,1)#初始化輸入層和隱含層之間的權值

foriinrange(1,len(layers)-1):r=2*np.random.random((layers[i-1]+1,layers[i]+1))-1#add1forbiasnodeself.weights.append(r)

多層感知機的應用逼近XOR問題MLP類#初始化輸出層權值

r=2*np.random.random((layers[i]+1,layers[i+1]))-1self.weights.append(r)#rangeofweightvalues(-1,1)

#初始化輸入層和隱含層之間的權值

foriinrange(1,len(layers)-1):

r=2*np.random.random((layers[i-1]+1,layers[i]+1))-1#add1forbiasnode

self.weights.append(r)

#初始化輸出層權值

r=2*np.random.random((layers[i]+1,layers[i+1]))-1

self.weights.append(r)多層感知機的應用逼近XOR問題fit()函數(shù)deffit(self,X,Y,learning_rate=0.2,epochs=10000):#AddcolumnofonestoX#ThisistoaddthebiasunittotheinputlayerX=np.hstack([np.ones((X.shape[0],1)),X])

forkinrange(epochs):#訓練固定次數(shù)#Returnrandomintegersfromthediscreteuniformdistributionintheinterval[0,low).i=np.random.randint(X.shape[0],high=None)a=[X[i]]#從m個輸入樣本中隨機選一組

forlinrange(len(self.weights)):#權值矩陣中每一列代表該層中的一個結點與上一層所有結點之間的權值dot_value=np.dot(a[l],self.weights[l])activation=self.activation(dot_value)a.append(activation)多層感知機的應用逼近XOR問題fit()函數(shù)

#反向遞推計算delta:從輸出層開始,先算出該層的delta,再向前計算error=Y[i]-a[-1]#計算輸出層deltadeltas=[error*self.activation_prime(a[-1])]

#從倒數(shù)第2層開始反向計算deltaforlinrange(len(a)-2,0,-1):deltas.append(deltas[-1].dot(self.weights[l].T)*self.activation_prime(a[l]))

#[level3(output)->level2(hidden)]=>[level2(hidden)->level3(output)]deltas.reverse()#逆轉列表中的元素

多層感知機的應用逼近XOR問題fit()函數(shù)#backpropagation#1.Multiplyitsoutputdeltaandinputactivationtogetthegradientoftheweight.#2.Subtractaratio(percentage)ofthegradientfromtheweight.foriinrange(len(self.weights)):#逐層調整權值layer=np.atleast_2d(a[i])#Viewinputsasarrayswithatleasttwodimensionsdelta=np.atleast_2d(deltas[i])#每輸入一次樣本,就更新一次權值self.weights[i]+=learning_rate*np.dot(layer.T,delta)多層感知機的應用逼近XOR問題predict()函數(shù)defpredict(self,x):a=np.concatenate((np.ones(1),np.array(x)))#a為輸入向量(行向量)forlinrange(0,len(self.weights)):#逐層計算輸出a=self.activation(np.dot(a,self.weights[l]))returna多層感知機的應用逼近XOR問題主程序if__name__=='__main__':mlp=MLP([2,2,1])#網絡結構:2輸入1輸出,1個隱含層(包含2個結點)X=np.array([[0,0],#輸入矩陣(每行代表一個樣本,每列代表一個特征)[0,1],[1,0],[1,1]])Y=np.array([0,1,1,0])#目標值

mlp.fit(X,Y)#訓練網絡

print'w:',mlp.weights#調整后的權值列表

forsinX:print(s,mlp.predict(s))#測試多層感知機的應用識別手寫數(shù)字MNIST數(shù)據集MNIST(混合美國標準和技術研究所)數(shù)據集是由YannLeCun發(fā)起建立的手寫數(shù)字圖象集合,樣本包含0-9的數(shù)字圖像,來自于美國高校學生和人口普查局的雇員書寫的文檔。目前MNIST已經成為圖像分類領域的基準測試數(shù)據集之一,該數(shù)據集包含60000幅圖像的訓練集和10000幅圖像的測試集,每幅圖像是分辨率為28*28像素的灰度圖像。

多層感知機的應用識別手寫數(shù)字MNIST數(shù)據集importmatplotlib.pyplotaspltimportnumpyasnpfromsklearn.datasetsimportfetch_openmlimportmatplotlib.cmascm

mnist=fetch_openml("mnist_784",version=1)

#fetch_mldata('MNISToriginal')counter=1foriinrange(1,5):forjinrange(1,9):plt.subplot(4,8,counter)plt.imshow(mnist.data[int(70000*(np.random.random()))].reshape((28,28)),cmap=cm.Greys_r)plt.axis('off')counter+=1plt.show()多層感知機的應用識別手寫數(shù)字模型多層感知機的應用識別手寫數(shù)字利用sklearn包提供的多層感知機MLPClassifier類來完成識別任務#用MLP識別MNIST字符importmatplotlib.pyplotaspltfromsklearn.datasetsimportfetch_openmlfromsklearn.neural_networkimportMLPClassifierfromsklearn.metricsimportclassification_report#獲取MNIST數(shù)據集mnist=fetch_openml("mnist_784",version=1)#fetch_mldata('MNISToriginal')#獲取特征和目標值X=mnist.datay=mnist.target#像素灰度值歸一化X=X/255.

多層感知機的應用識別手寫數(shù)字利用sklearn包提供的多層感知機MLPClassifier類來完成識別任務#分割訓練集和測試集X_train,X_test=X[:60000],X[60000:]y_train,y_test=y[:60000],y[60000:]#定義MLP模型,1個隱含層,含50個隱結點,訓練周期為10#采用SGD算法,學習率0.1mlp=MLPClassifier(hidden_layer_sizes=(50,),max_iter=10,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論