日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python神经网络预测的例子,神经网络算法python实现

發布時間:2023/12/20 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python神经网络预测的例子,神经网络算法python实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

python做BP神經網絡,進行數據預測,訓練的輸入和輸出值都存在負數,為什么預測值永遠為正數?

python 神經網絡預測 持續性預測

學習人工智能時,我給自己定了一個目標--用Python寫一個簡單的神經網絡AI愛發貓 www.aifamao.com。為了確保真得理解它,我要求自己不使用任何神經網絡庫,從頭寫起。多虧了AndrewTrask寫得一篇精彩的博客,我做到了!

下面貼出那九行代碼:在這篇文章中,我將解釋我是如何做得,以便你可以寫出你自己的。我將會提供一個長點的但是更完美的源代碼。

如何用9行Python代碼編寫一個簡易神經網絡

學習人工智能時,我給自己定了一個目標--用Python寫一個簡單的神經網絡。為了確保真得理解它,我要求自己不使用任何神經網絡庫,從頭寫起。多虧了AndrewTrask寫得一篇精彩的博客,我做到了!

下面貼出那九行代碼:在這篇文章中,我將解釋我是如何做得,以便你可以寫出你自己的。我將會提供一個長點的但是更完美的源代碼。首先,神經網絡是什么?人腦由幾千億由突觸相互連接的細胞(神經元)組成。

突觸傳入足夠的興奮就會引起神經元的興奮。這個過程被稱為“思考”。我們可以在計算機上寫一個神經網絡來模擬這個過程。不需要在生物分子水平模擬人腦,只需模擬更高層級的規則。

我們使用矩陣(二維數據表格)這一數學工具,并且為了簡單明了,只模擬一個有3個輸入和一個輸出的神經元。我們將訓練神經元解決下面的問題。前四個例子被稱作訓練集。你發現規律了嗎?‘?’是0還是1?

你可能發現了,輸出總是等于輸入中最左列的值。所以‘?’應該是1。訓練過程但是如何使我們的神經元回答正確呢?賦予每個輸入一個權重,可以是一個正的或負的數字。

擁有較大正(或負)權重的輸入將決定神經元的輸出。首先設置每個權重的初始值為一個隨機數字,然后開始訓練過程:取一個訓練樣本的輸入,使用權重調整它們,通過一個特殊的公式計算神經元的輸出。

計算誤差,即神經元的輸出與訓練樣本中的期待輸出之間的差值。根據誤差略微地調整權重。重復這個過程1萬次。最終權重將會變為符合訓練集的一個最優解。

如果使用神經元考慮這種規律的一個新情形,它將會給出一個很棒的預測。這個過程就是backpropagation。計算神經元輸出的公式你可能會想,計算神經元輸出的公式是什么?

首先,計算神經元輸入的加權和,即接著使之規范化,結果在0,1之間。為此使用一個數學函數--Sigmoid函數:Sigmoid函數的圖形是一條“S”狀的曲線。

把第一個方程代入第二個,計算神經元輸出的最終公式為:你可能注意到了,為了簡單,我們沒有引入最低興奮閾值。調整權重的公式我們在訓練時不斷調整權重。但是怎么調整呢?

可以使用“ErrorWeightedDerivative”公式:為什么使用這個公式?首先,我們想使調整和誤差的大小成比例。其次,乘以輸入(0或1),如果輸入是0,權重就不會調整。

最后,乘以Sigmoid曲線的斜率(圖4)。

為了理解最后一條,考慮這些:我們使用Sigmoid曲線計算神經元的輸出如果輸出是一個大的正(或負)數,這意味著神經元采用這種(或另一種)方式從圖四可以看出,在較大數值處,Sigmoid曲線斜率小如果神經元認為當前權重是正確的,就不會對它進行很大調整。

乘以Sigmoid曲線斜率便可以實現這一點Sigmoid曲線的斜率可以通過求導得到:把第二個等式代入第一個等式里,得到調整權重的最終公式:當然有其他公式,它們可以使神經元學習得更快,但是這個公式的優點是非常簡單。

構造Python代碼雖然我們沒有使用神經網絡庫,但是將導入Python數學庫numpy里的4個方法。

分別是:exp--自然指數array--創建矩陣dot--進行矩陣乘法random--產生隨機數比如,我們可以使用array()方法表示前面展示的訓練集:“.T”方法用于矩陣轉置(行變列)。

所以,計算機這樣存儲數字:我覺得我們可以開始構建更優美的源代碼了。給出這個源代碼后,我會做一個總結。我對每一行源代碼都添加了注釋來解釋所有內容。注意在每次迭代時,我們同時處理所有訓練集數據。

所以變量都是矩陣(二維數據表格)。下面是一個用Python寫地完整的示例代碼。我們做到了!我們用Python構建了一個簡單的神經網絡!首先神經網絡對自己賦予隨機權重,然后使用訓練集訓練自己。

接著,它考慮一種新的情形[1,0,0]并且預測了0.99993704。正確答案是1。非常接近!傳統計算機程序通常不會學習。

而神經網絡卻能自己學習,適應并對新情形做出反應,這是多么神奇,就像人類一樣。

如何利用python實現神經網絡

官方不支持,建議等支持吧。dll有自己版本對應的,必須使用專門為python3.4編譯的dll(),你拿python2.7的肯定用不了。

如果非要使用——方法一:自己編譯opencv的源碼方法二:安裝python2.7。

如何用 Python 構建神經網絡擇時模型

importmathimportrandom(0)defrand(a,b):#隨機函數return(b-a)*random.random()+adefmake_matrix(m,n,fill=0.0):#創建一個指定大小的矩陣mat=[]foriinrange(m):mat.append([fill]*n)returnmat#定義sigmoid函數和它的導數defsigmoid(x):return1.0/((-x))defsigmoid_derivate(x):returnx*(1-x)#sigmoid函數的導數classBPNeuralNetwork:def__init__(self):#初始化變量self.input_n=0self.hidden_n=0self.output_n=0self.input_cells=[]self.hidden_cells=[]self.output_cells=[]self.input_weights=[]self.output_weights=[]self.input_correction=[]self.output_correction=[]#三個列表維護:輸入層,隱含層,輸出層神經元defsetup(self,ni,nh,no):self.input_n=ni+1#輸入層+偏置項self.hidden_n=nh#隱含層self.output_n=no#輸出層#初始化神經元self.input_cells=[1.0]*self.input_nself.hidden_cells=[1.0]*self.hidden_nself.output_cells=[1.0]*self.output_n#初始化連接邊的邊權self.input_weights=make_matrix(self.input_n,self.hidden_n)#鄰接矩陣存邊權:輸入層->隱藏層self.output_weights=make_matrix(self.hidden_n,self.output_n)#鄰接矩陣存邊權:隱藏層->輸出層#隨機初始化邊權:為了反向傳導做準備--->隨機初始化的目的是使對稱失效foriinrange(self.input_n):forhinrange(self.hidden_n):self.input_weights[i][h]=rand(-0.2,0.2)#由輸入層第i個元素到隱藏層第j個元素的邊權為隨機值forhinrange(self.hidden_n):foroinrange(self.output_n):self.output_weights[h][o]=rand(-2.0,2.0)#由隱藏層第i個元素到輸出層第j個元素的邊權為隨機值#保存校正矩陣,為了以后誤差做調整self.input_correction=make_matrix(self.input_n,self.hidden_n)self.output_correction=make_matrix(self.hidden_n,self.output_n)#輸出預測值defpredict(self,inputs):#對輸入層進行操作轉化樣本foriinrange(self.input_n-1):self.input_cells[i]=inputs[i]#n個樣本從0~n-1#計算隱藏層的輸出,每個節點最終的輸出值就是權值*節點值的加權和forjinrange(self.hidden_n):total=0.0foriinrange(self.input_n):total+=self.input_cells[i]*self.input_weights[i][j]#此處為何是先i再j,以隱含層節點做大循環,輸入樣本為小循環,是為了每一個隱藏節點計算一個輸出值,傳輸到下一層self.hidden_cells[j]=sigmoid(total)#此節點的輸出是前一層所有輸入點和到該點之間的權值加權和forkinrange(self.output_n):total=0.0forjinrange(self.hidden_n):total+=self.hidden_cells[j]*self.output_weights[j][k]self.output_cells[k]=sigmoid(total)#獲取輸出層每個元素的值returnself.output_cells[:]#最后輸出層的結果返回#反向傳播算法:調用預測函數,根據反向傳播獲取權重后前向預測,將結果與實際結果返回比較誤差defback_propagate(self,case,label,learn,correct):#對輸入樣本做預測self.predict(case)#對實例進行預測output_deltas=[0.0]*self.output_n#初始化矩陣foroinrange(self.output_n):error=label[o]-self.output_cells[o]#正確結果和預測結果的誤差:0,1,-1output_deltas[o]=sigmoid_derivate(self.output_cells[o])*error#誤差穩定在0~1內#隱含層誤差hidden_deltas=[0.0]*self.hidden_nforhinrange(self.hidden_n):error=0.0foroinrange(self.output_n):error+=output_deltas[o]*self.output_weights[h][o]hidden_deltas[h]=sigmoid_derivate(self.hidden_cells[h])*error#反向傳播算法求W#更新隱藏層->輸出權重forhinrange(self.hidden_n):foroinrange(self.output_n):change=output_deltas[o]*self.hidden_cells[h]#調整權重:上一層每個節點的權重學習*變化+矯正率self.output_weights[h][o]+=learn*change+correct*self.output_correction[h][o]#更新輸入->隱藏層的權重foriinrange(self.input_n):forhinrange(self.hidden_n):change=hidden_deltas[h]*self.input_cells[i]self.input_weights[i][h]+=learn*change+correct*self.input_correction[i][h]self.input_correction[i][h]=change#獲取全局誤差error=0.0foroinrange(len(label)):error=0.5*(label[o]-self.output_cells[o])**2#平方誤差函數returnerrordeftrain(self,cases,labels,limit=10000,learn=0.05,correct=0.1):foriinrange(limit):#設置迭代次數error=0.0forjinrange(len(cases)):#對輸入層進行訪問label=labels[j]case=cases[j]error+=self.back_propagate(case,label,learn,correct)#樣例,標簽,學習率,正確閾值deftest(self):#學習異或cases=[[0,0],[0,1],[1,0],[1,1],]#測試樣例labels=[[0],[1],[1],[0]]#標簽self.setup(2,5,1)#初始化神經網絡:輸入層,隱藏層,輸出層元素個數self.train(cases,labels,10000,0.05,0.1)#可以更改forcaseincases:print(self.predict(case))if__name__=='__main__':nn=BPNeuralNetwork()()。

?

總結

以上是生活随笔為你收集整理的python神经网络预测的例子,神经网络算法python实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。