① MATLAB神經網路BP,誤差超大,怎樣調試是誤差更接近目標值主要調試哪些參數謝謝。。。
被推薦的答案倒是沒說錯,基本上和沒說一樣…… 就好比問怎麼安排時間,回答一個「合理安排時間」……
誤差大,第一步需要嘗試的是做歸一化處理。有線性歸一化,有對數函數歸一化等等,這個你可以去網上搜索數據歸一化方法,有相關的代碼,應該。
第二部需要做出的改動是隱層節點數量,如果節點數量太多,那麼結果的隨機性就會很大,如果太少,那麼復雜數據的規律計算不出來。多少層節點最合適,這個目前除了一個一個試沒有更好的辦法。但是你會發現每一個相同的結構計算出的結果卻不盡相同,這個時候就需要考慮後續的問題。
第三步嘗試,變換transfer function。麻煩你查查字典,因為我不是用中文學的神經網路。我姑且翻譯成傳輸函數。傳輸函數在matlab中內建了3中 pureline logsig tansig。分別有不同的應用范圍。因為沒看到你的數據,我也不清楚具體應該推薦你用哪一種。不過你可以去網上搜索一下三種傳輸函數的特點。
一般情況下,前三步已經可以解決問題了。
如果不行,那麼你需要嘗試的就是比較高級的內容了。嘗試一下,不行再追問。
② 用MATLAB中神經網路工具箱固有函數建立的BP網路,訓練精度始終達不到,而且誤差也大,該如何解決
除了樓上的方法,還可以修改下神經網路的初始權值,這方面的方法很多,可以改變下初始參數的取值范圍,或者用遺傳演算法搜索下。另外,改變神經網路的訓練函數是十分有效的,比如trainscg什麼的,還有好幾個記不得了,自己找找看!
③ matlab 神經網路一直訓練不好。
歸一化:使用Matlab自帶的mapminmax函數。
mapminmax按行逐行地對數據進行標准化處理,將每一行數據分別標准化到區間[ymin, ymax]內,其計算公式是:y = (ymax-ymin)*(x-xmin)/(xmax-xmin) + ymin。如果某行的數據全部相同,此時xmax=xmin,除數為0,則Matlab內部將此變換變為y = ymin。
(1) [Y,PS] = mapminmax(X,YMIN,YMAX)——將數據X歸一化到區間[YMIN,YMAX]內,YMIN和YMAX為調用mapminmax函數時設置的參數,如果不設置這兩個參數,這默認歸一化到區間[-1, 1]內。標准化處理後的數據為Y,PS為記錄標准化映射的結構體。
【例1】Matlab命令窗口輸入:X=12+8*randn(6,8); [Y,PS] = mapminmax(X,0,1),則將隨機數矩陣X按行逐行標准化到區間[0,1]內,並返回標准矩陣Y和結構體PS(至於它的作用,將在後面介紹到),它記錄了X的行數、X中各行的最大值與最小值等信息。這里:
PS =
name: 'mapminmax'
xrows: 6
xmax: [6x1 double]
xmin: [6x1 double]
xrange: [6x1 double]
yrows: 6
ymax: 1
ymin: 0
yrange: 1
no_change: 0
gain: [6x1 double]
xoffset: [6x1 double]
(2) [Y,PS] = mapminmax(X,FP) ——將YMIN和YMAX組成的結構體FP作為映射參數(FP.ymin和FP.ymax.)對進行標准化處理。
【例2】Matlab命令窗口輸入:XX=12+8*randn(6,8); FP.ymin=-2; FP.ymax=2; [YY,PSS] = mapminmax(XX,FP),則將隨機數矩陣X按行逐行標准化到區間[-2,2]內,並返回標准矩陣YY和結構體PSS。
(3) Y = mapminmax('apply',X,PS) ——根據已有給定的數據標准化處理映射PS,將給定的數據X標准化為Y。
【例3】在例1的基礎上,Matlab命令窗口輸入:XXX=23+11*randn(6,8); YYY= mapminmax('apply',XXX,PS),則根據例1的標准化映射,將XXX標准化(結果可能不全在先前設置的[YMIN,YMAX]內,這取決於XXX中數據相對於X中數據的最大值與最小值的比較情況)。注意:此時,XXX的行數必須與X的行數(PS中已記錄)相等,否則無法進行;列數可不等。
(4) X = mapminmax('reverse',Y,PS) ——根據已有給定的數據標准化處理映射PS,將給定的標准化數據Y反標准化。
【例4】在例1的基礎上,Matlab命令窗口輸入:YYYY=rand(6,8); XXXX = mapminmax('reverse', YYYY,PS),則根據例1的標准化映射,將YYYY反標准化。注意:此時,YYYY的行數必須與X的行數(PS中已記錄)相等,否則無法進行;列數可不等。
(5) dx_dy = mapminmax('dx_dy',X,Y,PS) ——根據給定的矩陣X、標准化矩陣Y及映射PS,獲取逆向導數(reverse derivative)。如果給定的X和Y是m行n列的矩陣,那麼其結果dx_dy是一個1×n結構體數組,其每個元素又是一個m×n的對角矩陣。這種用法不常用,這里不再舉例。
對於另一個問題:使用sim函數來得到輸出,一般來說會有誤差,不可能與預計輸出完全相等的。
④ 深度神經網路dnn怎麼調節參數
深度神經網路(DNN)目前是許多現代AI應用的基礎。
自從DNN在語音識別和圖像識別任務中展現出突破性的成果,使用DNN的應用數量呈爆炸式增加。這些DNN方法被大量應用在無人駕駛汽車,癌症檢測,游戲AI等方面。
在許多領域中,DNN目前的准確性已經超過人類。與早期的專家手動提取特徵或制定規則不同,DNN的優越性能來自於在大量數據上使用統計學習方法,從原始數據中提取高級特徵的能力,從而對輸入空間進行有效的表示。
然而,DNN超高的准確性是以超高的計算復雜度為代價的。
通常意義下的計算引擎,尤其是GPU,是DNN的基礎。因此,能夠在不犧牲准確性和增加硬體成本的前提下,提高深度神經網路的能量效率和吞吐量的方法,對於DNN在AI系統中更廣泛的應用是至關重要的。研究人員目前已經更多的將關注點放在針對DNN計算開發專用的加速方法。
鑒於篇幅,本文主要針對論文中的如下幾部分詳細介紹:
DNN的背景,歷史和應用
DNN的組成部分,以及常見的DNN模型
簡介如何使用硬體加速DNN運算
DNN的背景
人工智慧與深度神經網路
深度神經網路,也被稱為深度學習,是人工智慧領域的重要分支,根據麥卡錫(人工智慧之父)的定義,人工智慧是創造像人一樣的智能機械的科學工程。深度學習與人工智慧的關系如圖1所示:
圖1:深度神經網路與人工智慧的關系
人工智慧領域內,一個大的子領域是機器學習,由Arthur Samuel在1959年定義為:讓計算機擁有不需要明確編程即可學習的能力。
這意味著創建一個程序,這個程序可以被訓練去學習如何去做一些智能的行為,然後這個程序就可以自己完成任務。而傳統的人工啟發式方法,需要對每個新問題重新設計程序。
高效的機器學習演算法的優點是顯而易見的。一個機器學習演算法,只需通過訓練,就可以解決某一領域中每一個新問題,而不是對每個新問題特定地進行編程。
在機器學習領域,有一個部分被稱作brain-inspired computation。因為人類大腦是目前學習和解決問題最好的「機器」,很自然的,人們會從中尋找機器學習的方法。
盡管科學家們仍在探索大腦工作的細節,但是有一點被公認的是:神經元是大腦的主要計算單元。
人類大腦平均有860億個神經元。神經元相互連接,通過樹突接受其他神經元的信號,對這些信號進行計算之後,通過軸突將信號傳遞給下一個神經元。一個神經元的軸突分支出來並連接到許多其他神經元的樹突上,軸突分支和樹突之間的連接被稱為突觸。據估計,人類大腦平均有1014-1015個突觸。
突觸的一個關鍵特性是它可以縮放通過它的信號大小。這個比例因子可以被稱為權重(weight),普遍認為,大腦學習的方式是通過改變突觸的權重實現的。因此,不同的權重導致對輸入產生不同的響應。注意,學習過程是學習刺激導致的權重調整,而大腦組織(可以被認為是程序)並不改變。
大腦的這個特徵對機器學習演算法有很好的啟示。
神經網路與深度神經網路
神經元的計算是輸入值的加權和這個概念啟發了神經網路的研究。這些加權和對應於突觸的縮放值以及神經元所接收的值的組合。此外,神經元並不僅僅是輸入信號的加權和,如果是這樣的話,級聯的神經元的計算將是一種簡單的線性代數運算。
相反的是,神經元組合輸入的操作似乎是一種非線性函數,只有輸入達到某個閾值的時候,神經元才會生成輸出。因此,通過類比,我們可以知道神經網路在輸入值的加權和的基礎上應用了非線性函數。
圖2(a)展示了計算神經網路的示意圖,圖的最左邊是接受數值的「輸入層」。這些值被傳播到中間層神經元,通常也叫做網路的「隱藏層」。通過一個或更多隱藏層的加權和最終被傳播到「輸出層」,將神經網路的最終結果輸出給用戶。
圖2:神經網路示意圖
在神經網路領域,一個子領域被稱為深度學習。最初的神經網路通常只有幾層的網路。而深度網路通常有更多的層數,今天的網路一般在五層以上,甚至達到一千多層。
目前在視覺應用中使用深度神經網路的解釋是:將圖像所有像素輸入到網路的第一層之後,該層的加權和可以被解釋為表示圖像不同的低階特徵。隨著層數的加深,這些特徵被組合,從而代表更高階的圖像特徵。
例如,線可以被組合成形狀,再進一步,可以被組合成一系列形狀的集合。最後,再訓練好這些信息之後,針對各個圖像類別,網路給出由這些高階特徵組成各個對象的概率,即分類結果。
推理(Inference)與訓練(Training)
既然DNN是機器學習演算法中的一員,那麼它的基本編程思想仍然是學習。DNN的學習即確定網路的權重值。通常,學習過程被稱為訓練網路(training)。一旦訓練完成,程序可以使用由訓練確定的權值進行計算,這個使用網路完成任務的操作被被稱為推斷(inference)。
接下來,如圖3所示,我們用圖像分類作為例子來展示如何訓練一個深度神經網路。當我們使用一個DNN的時候,我們輸入一幅圖片,DNN輸出一個得分向量,每一個分數對應一個物體分類;得到最高分數的分類意味著這幅圖片最有可能屬於這個分類。
訓練DNN的首要目標就是確定如何設置權重,使得正確分類的得分最高(圖片所對應的正確分類在訓練數據集中標出),而使其他不正確分類的得分盡可能低。理想的正確分類得分與目前的權重所計算出的得分之間的差距被稱為損失函數(loss)。
因此訓練DNN的目標即找到一組權重,使得對一個較大規模數據集的loss最小。
圖3:圖像分類
權重(weight)的優化過程類似爬山的過程,這種方法被稱為梯度下降(gradient decent)。損失函數對每個權值的梯度,即損失函數對每個權值求偏導數,被用來更新權值(例:第t到t+1次迭代:,其中α被稱為學習率(Learning rate)。梯度值表明權值應該如何變化以減小loss。這個減小loss值的過程是重復迭代進行的。
梯度可以通過反向傳播(Back-Propagation)過程很高效地進行計算,loss的影響反向通過網路來計算loss是如何被每個權重影響的。
訓練權重有很多種方法。前面提到的是最常見的方法,被稱為監督學習,其中所有的訓練樣本是有標簽的。
無監督學習是另一種方法,其中所有訓練樣本都沒有標簽,最終目標是在數據中查找結構或聚類。半監督學習結合了兩種方法,只有訓練數據的一小部分被標記(例如,使用未標記的數據來定義集群邊界,並使用少量的標記數據來標記集群)。
最後,強化學習可以用來訓練一個DNN作為一個策略網路,對策略網路給出一個輸入,它可以做出一個決定,使得下一步的行動得到相應的獎勵;訓練這個網路的過程是使網路能夠做出使獎勵(即獎勵函數)最大化的決策,並且訓練過程必須平衡嘗試新行為(Exploration)和使用已知能給予高回報的行為(Exploitation)兩種方法。
用於確定權重的另一種常用方法是fine-tune,使用預先訓練好的模型的權重用作初始化,然後針對新的數據集(例如,傳遞學習)或新的約束(例如,降低的精度)調整權重。與從隨機初始化開始相比,能夠更快的訓練,並且有時會有更好的准確性。
⑤ 神經網路中閾值和權值的初值怎麼調整為什麼我的老是誤差特別大呢
將訓練目標改小一些,你先不設權值和閾值,讓其訓練,挑出一組訓練效果最好的,在命令窗口上顯示出初始權值和閾值,再將權值和閾值設置成那組權值和閾值即可,你試試吧,我也是初學,也不敢保證能行
⑥ BP神經網路如何設置初始權值
初始權值、閾值的確定是靠經驗的。
一般修改神經網路,不改閾值,改動其中間層神經元、轉移函數、特徵向量等。
⑦ BP神經網路 運行的步驟太少就停了,是參數設置的問題嗎
不是運行太少而停止,是達到了你的要求。
net.trainParam.goal=0.01;
精度調高點試下
⑧ Matlab的神經網路訓練完了,怎麼測試的時候誤差這么大
預測數據與實際數據的相對誤差就是一個衡量指標。