1. 貝葉斯正則化BP神經網路訓練慢
貝葉斯分類器由概率統計得出,和神經網路都需要經過訓練得到相應的分類的功能,如果非要說區別的話就是結構上的區別,神經網路通過高階級數或者幾何空間逼近,無數多的節點構成了非常復雜的數據相關性,而貝葉斯分類器則通過每個模式(事件幾何下)中發生該事件的概率來反過來推導發生該這些事件概率後 屬於那種模式,理論上神經網路是連續系統,貝葉斯不是連續的,並且貝葉斯不能處理維度間高度相關性的事件(這就好比 z=ax+by ,但y里又有x的相關因子,x和y並不獨立),而神經網路沒這個問題。
2. BP神經網路的訓練集需要大樣本嗎一般樣本個數為多少
BP神經網路的訓練集需要大樣本嗎?一般樣本個數為多少?
BP神經網路樣本數有什麼影響
學習神經網路這段時間,有一個疑問,BP神經網路中訓練的次數指的網路的迭代次數,如果有a個樣本,每個樣本訓練次數n,則網路一共迭代an次,在n>>a 情況下 , 網路在不停的調整權值,減小誤差,跟樣本數似乎關系不大。而且,a大了的話訓練時間必然會變長。
換一種說法,將你的數據集看成一個固定值, 那麼樣本集與測試集 也可以按照某種規格確定下來如7:3 所以如何看待 樣本集的多少與訓練結果呢? 或者說怎麼使你的網路更加穩定,更加符合你的所需 。
我嘗試從之前的一個例子中看下區別
如何用70行Java代碼實現深度神經網路演算法
作者其實是實現了一個BP神經網路 ,不多說,看最後的例子
一個運用神經網路的例子
最後我們找個簡單例子來看看神經網路神奇的效果。為了方便觀察數據分布,我們選用一個二維坐標的數據,下面共有4個數據,方塊代表數據的類型為1,三角代表數據的類型為0,可以看到屬於方塊類型的數據有(1,2)和(2,1),屬於三角類型的數據有(1,1),(2,2),現在問題是需要在平面上將4個數據分成1和0兩類,並以此來預測新的數據的類型。
圖片描述
我們可以運用邏輯回歸演算法來解決上面的分類問題,但是邏輯回歸得到一個線性的直線做為分界線,可以看到上面的紅線無論怎麼擺放,總是有一個樣本被錯誤地劃分到不同類型中,所以對於上面的數據,僅僅一條直線不能很正確地劃分他們的分類,如果我們運用神經網路演算法,可以得到下圖的分類效果,相當於多條直線求並集來劃分空間,這樣准確性更高。
圖片描述
簡單粗暴,用作者的代碼運行後 訓練5000次 。根據訓練結果來預測一條新數據的分類(3,1)
預測值 (3,1)的結果跟(1,2)(2,1)屬於一類 屬於正方形
這時如果我們去掉 2個樣本,則樣本輸入變成如下
//設置樣本數據,對應上面的4個二維坐標數據
double[][] data = new double[][]{{1,2},{2,2}};
//設置目標數據,對應4個坐標數據的分類
double[][] target = new double[][]{{1,0},{0,1}};
1
2
3
4
1
2
3
4
則(3,1)結果變成了三角形,
如果你選前兩個點 你會發現直接一條中間線就可以區分 這時候的你的結果跟之前4個點時有區別 so 你得增加樣本 直到這些樣本按照你所想要的方式分類 ,所以樣本的多少 重要性體現在,樣本得能反映所有的特徵值(也就是輸入值) ,樣本多少或者特徵(本例子指點的位置特徵)決定的你的網路的訓練結果,!!!這是 我們反推出來的結果 。這里距離深度學習好像近了一步。
另外,這個70行代碼的神經網路沒有保存你訓練的網路 ,所以你每次運行都是重新訓練的網路。其實,在你訓練過後 權值已經確定了下來,我們確定網路也就是根據權值,so只要把訓練後的權值保存下來,將需要分類的數據按照這種權值帶入網路,即可得到輸出值,也就是一旦網路確定, 權值也就確定,一個輸入對應一個固定的輸出,不會再次改變!個人見解。
最後附上作者的源碼,作者的文章見開頭鏈接
下面的實現程序BpDeep.java可以直接拿去使用,
import java.util.Random;
public class BpDeep{
public double[][] layer;//神經網路各層節點
public double[][] layerErr;//神經網路各節點誤差
public double[][][] layer_weight;//各層節點權重
public double[][][] layer_weight_delta;//各層節點權重動量
public double mobp;//動量系數
public double rate;//學習系數
public BpDeep(int[] layernum, double rate, double mobp){
this.mobp = mobp;
this.rate = rate;
layer = new double[layernum.length][];
layerErr = new double[layernum.length][];
layer_weight = new double[layernum.length][][];
layer_weight_delta = new double[layernum.length][][];
Random random = new Random();
for(int l=0;l<layernum.length;l++){
layer[l]=new double[layernum[l]];
layerErr[l]=new double[layernum[l]];
if(l+1<layernum.length){
layer_weight[l]=new double[layernum[l]+1][layernum[l+1]];
layer_weight_delta[l]=new double[layernum[l]+1][layernum[l+1]];
for(int j=0;j<layernum[l]+1;j++)
for(int i=0;i<layernum[l+1];i++)
layer_weight[l][j][i]=random.nextDouble();//隨機初始化權重
}
}
}
//逐層向前計算輸出
public double[] computeOut(double[] in){
for(int l=1;l<layer.length;l++){
for(int j=0;j<layer[l].length;j++){
double z=layer_weight[l-1][layer[l-1].length][j];
for(int i=0;i<layer[l-1].length;i++){
layer[l-1][i]=l==1?in[i]:layer[l-1][i];
z+=layer_weight[l-1][i][j]*layer[l-1][i];
}
layer[l][j]=1/(1+Math.exp(-z));
}
}
return layer[layer.length-1];
}
//逐層反向計算誤差並修改權重
public void updateWeight(double[] tar){
int l=layer.length-1;
for(int j=0;j<layerErr[l].length;j++)
layerErr[l][j]=layer[l][j]*(1-layer[l][j])*(tar[j]-layer[l][j]);
while(l-->0){
for(int j=0;j<layerErr[l].length;j++){
double z = 0.0;
for(int i=0;i<layerErr[l+1].length;i++){
z=z+l>0?layerErr[l+1][i]*layer_weight[l][j][i]:0;
layer_weight_delta[l][j][i]= mobp*layer_weight_delta[l][j][i]+rate*layerErr[l+1][i]*layer[l][j];//隱含層動量調整
layer_weight[l][j][i]+=layer_weight_delta[l][j][i];//隱含層權重調整
if(j==layerErr[l].length-1){
layer_weight_delta[l][j+1][i]= mobp*layer_weight_delta[l][j+1][i]+rate*layerErr[l+1][i];//截距動量調整
layer_weight[l][j+1][i]+=layer_weight_delta[l][j+1][i];//截距權重調整
}
}
layerErr[l][j]=z*layer[l][j]*(1-layer[l][j]);//記錄誤差
}
}
}
public void train(double[] in, double[] tar){
double[] out = computeOut(in);
updateWeight(tar);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
下面是這個測試程序BpDeepTest.java的源碼:
import java.util.Arrays;
public class BpDeepTest{
public static void main(String[] args){
//初始化神經網路的基本配置
//第一個參數是一個整型數組,表示神經網路的層數和每層節點數,比如{3,10,10,10,10,2}表示輸入層是3個節點,輸出層是2個節點,中間有4層隱含層,每層10個節點
//第二個參數是學習步長,第三個參數是動量系數
BpDeep bp = new BpDeep(new int[]{2,10,2}, 0.15, 0.8);
//設置樣本數據,對應上面的4個二維坐標數據
double[][] data = new double[][]{{1,2},{2,2},{1,1},{2,1}};
//設置目標數據,對應4個坐標數據的分類
double[][] target = new double[][]{{1,0},{0,1},{0,1},{1,0}};
//迭代訓練5000次
for(int n=0;n<5000;n++)
for(int i=0;i<data.length;i++)
bp.train(data[i], target[i]);
//根據訓練結果來檢驗樣本數據
for(int j=0;j<data.length;j++){
double[] result = bp.computeOut(data[j]);
System.out.println(Arrays.toString(data[j])+":"+Arrays.toString(result));
}
//根據訓練結果來預測一條新數據的分類
double[] x = new double[]{3,1};
double[] result = bp.computeOut(x);
System.out.println(Arrays.toString(x)+":"+Arrays.toString(result));
}
}
3. 關於BP神經網路訓練次數問題
初始權值不一樣,每次訓練重置初始權值
4. BP神經網路是怎麼訓練的
就是將訓練樣本集劃分為兩部分,測試集和驗證集,僅用測試集訓練,每次訓練後用驗證集代入,求其誤差和,當訓練誤差不斷減小而驗證誤差卻增加時,可以考慮演算法終止,再訓練可能就會過擬合。
希望你能看明白
5. 遺傳演算法優化BP神經網路是不是會使訓練時間變慢!
1、遺傳演算法優化BP神經網路是指優化神經網路的參數;
2、因此,對訓練時間沒有影響。
6. bp神經網路
BP(Back Propagation)網路是1986年由Rumelhart和McCelland為首的科學家小組提出,是一種按誤差逆傳播演算法訓練的多層前饋網路,是目前應用最廣泛的神經網路模型之一。BP網路能學習和存貯大量的輸入-輸出模式映射關系,而無需事前揭示描述這種映射關系的數學方程。它的學習規則是使用最速下降法,通過反向傳播來不斷調整網路的權值和閾值,使網路的誤差平方和最小。BP神經網路模型拓撲結構包括輸入層(input)、隱層(hide layer)和輸出層(output layer)。
人工神經網路就是模擬人思維的第二種方式。這是一個非線性動力學系統,其特色在於信息的分布式存儲和並行協同處理。雖然單個神經元的結構極其簡單,功能有限,但大量神經元構成的網路系統所能實現的行為卻是極其豐富多彩的。
人工神經網路首先要以一定的學習准則進行學習,然後才能工作。現以人工神經網路對手寫「A」、「B」兩個字母的識別為例進行說明,規定當「A」輸入網路時,應該輸出「1」,而當輸入為「B」時,輸出為「0」。
所以網路學習的准則應該是:如果網路作出錯誤的的判決,則通過網路的學習,應使得網路減少下次犯同樣錯誤的可能性。首先,給網路的各連接權值賦予(0,1)區間內的隨機值,將「A」所對應的圖象模式輸入給網路,網路將輸入模式加權求和、與門限比較、再進行非線性運算,得到網路的輸出。在此情況下,網路輸出為「1」和「0」的概率各為50%,也就是說是完全隨機的。這時如果輸出為「1」(結果正確),則使連接權值增大,以便使網路再次遇到「A」模式輸入時,仍然能作出正確的判斷。
如果輸出為「0」(即結果錯誤),則把網路連接權值朝著減小綜合輸入加權值的方向調整,其目的在於使網路下次再遇到「A」模式輸入時,減小犯同樣錯誤的可能性。如此操作調整,當給網路輪番輸入若干個手寫字母「A」、「B」後,經過網路按以上學習方法進行若干次學習後,網路判斷的正確率將大大提高。這說明網路對這兩個模式的學習已經獲得了成功,它已將這兩個模式分布地記憶在網路的各個連接權值上。當網路再次遇到其中任何一個模式時,能夠作出迅速、准確的判斷和識別。一般說來,網路中所含的神經元個數越多,則它能記憶、識別的模式也就越多。
如圖所示拓撲結構的單隱層前饋網路,一般稱為三層前饋網或三層感知器,即:輸入層、中間層(也稱隱層)和輸出層。它的特點是:各層神經元僅與相鄰層神經元之間相互全連接,同層內神經元之間無連接,各層神經元之間無反饋連接,構成具有層次結構的前饋型神經網路系統。單計算層前饋神經網路只能求解線性可分問題,能夠求解非線性問題的網路必須是具有隱層的多層神經網路。
神經網路的研究內容相當廣泛,反映了多學科交叉技術領域的特點。主要的研究工作集中在以下幾個方面:
(1)生物原型研究。從生理學、心理學、解剖學、腦科學、病理學等生物科學方面研究神經細胞、神經網路、神經系統的生物原型結構及其功能機理。
(2)建立理論模型。根據生物原型的研究,建立神經元、神經網路的理論模型。其中包括概念模型、知識模型、物理化學模型、數學模型等。
(3)網路模型與演算法研究。在理論模型研究的基礎上構作具體的神經網路模型,以實現計算機模擬或准備製作硬體,包括網路學習演算法的研究。這方面的工作也稱為技術模型研究。
(4)人工神經網路應用系統。在網路模型與演算法研究的基礎上,利用人工神經網路組成實際的應用系統,例如,完成某種信號處理或模式識別的功能、構作專家系統、製成機器人等等。
縱觀當代新興科學技術的發展歷史,人類在征服宇宙空間、基本粒子,生命起源等科學技術領域的進程中歷經了崎嶇不平的道路。我們也會看到,探索人腦功能和神經網路的研究將伴隨著重重困難的克服而日新月異。
神經網路可以用作分類、聚類、預測等。神經網路需要有一定量的歷史數據,通過歷史數據的訓練,網路可以學習到數據中隱含的知識。在你的問題中,首先要找到某些問題的一些特徵,以及對應的評價數據,用這些數據來訓練神經網路。
雖然BP網路得到了廣泛的應用,但自身也存在一些缺陷和不足,主要包括以下幾個方面的問題。
首先,由於學習速率是固定的,因此網路的收斂速度慢,需要較長的訓練時間。對於一些復雜問題,BP演算法需要的訓練時間可能非常長,這主要是由於學習速率太小造成的,可採用變化的學習速率或自適應的學習速率加以改進。
其次,BP演算法可以使權值收斂到某個值,但並不保證其為誤差平面的全局最小值,這是因為採用梯度下降法可能產生一個局部最小值。對於這個問題,可以採用附加動量法來解決。
再次,網路隱含層的層數和單元數的選擇尚無理論上的指導,一般是根據經驗或者通過反復實驗確定。因此,網路往往存在很大的冗餘性,在一定程度上也增加了網路學習的負擔。
最後,網路的學習和記憶具有不穩定性。也就是說,如果增加了學習樣本,訓練好的網路就需要從頭開始訓練,對於以前的權值和閾值是沒有記憶的。但是可以將預測、分類或聚類做的比較好的權值保存。
請採納。
7. BP神經網路的神經網路
在人工神經網路發展歷史中,很長一段時間里沒有找到隱層的連接權值調整問題的有效演算法。直到誤差反向傳播演算法(BP演算法)的提出,成功地解決了求解非線性連續函數的多層前饋神經網路權重調整問題。
BP (Back Propagation)神經網路,即誤差反傳誤差反向傳播演算法的學習過程,由信息的正向傳播和誤差的反向傳播兩個過程組成。輸入層各神經元負責接收來自外界的輸入信息,並傳遞給中間層各神經元;中間層是內部信息處理層,負責信息變換,根據信息變化能力的需求,中間層可以設計為單隱層或者多隱層結構;最後一個隱層傳遞到輸出層各神經元的信息,經進一步處理後,完成一次學習的正向傳播處理過程,由輸出層向外界輸出信息處理結果。當實際輸出與期望輸出不符時,進入誤差的反向傳播階段。誤差通過輸出層,按誤差梯度下降的方式修正各層權值,向隱層、輸入層逐層反傳。周而復始的信息正向傳播和誤差反向傳播過程,是各層權值不斷調整的過程,也是神經網路學習訓練的過程,此過程一直進行到網路輸出的誤差減少到可以接受的程度,或者預先設定的學習次數為止。
BP神經網路模型BP網路模型包括其輸入輸出模型、作用函數模型、誤差計算模型和自學習模型。
(1)節點輸出模型
隱節點輸出模型:Oj=f(∑Wij×Xi-qj) (1)
輸出節點輸出模型:Yk=f(∑Tjk×Oj-qk) (2)
f-非線形作用函數;q -神經單元閾值。
(2)作用函數模型
作用函數是反映下層輸入對上層節點刺激脈沖強度的函數又稱刺激函數,一般取為(0,1)內連續取值Sigmoid函數: f(x)=1/(1+e乘方(-x)) (3)
(3)誤差計算模型
誤差計算模型是反映神經網路期望輸出與計算輸出之間誤差大小的函數:
(4)
tpi- i節點的期望輸出值;Opi-i節點計算輸出值。
(4)自學習模型
神經網路的學習過程,即連接下層節點和上層節點之間的權重矩陣Wij的設定和誤差修正過程。BP網路有師學習方式-需要設定期望值和無師學習方式-只需輸入模式之分。自學習模型為
△Wij(n+1)= h ×Фi×Oj+a×△Wij(n) (5)
h -學習因子;Фi-輸出節點i的計算誤差;Oj-輸出節點j的計算輸出;a-動量因子。
8. BP神經網路
你沒明白輸入,輸出時什麼啊。這個系統應該是用來預測流量的吧。輸入可以是年份和最大徑。最小經什麼的。你好像只用了年份。這里就不知道你的ZX是說明東西了,再就是輸入,輸出的個數到相等。 再試一試吧。不懂再問問
9. 用MATLAB與BP神經網路法處理15組數據,共60個數據,需要多長時間
訓練時長取決於訓練演算法、訓練目標、樣本數量和網路規模。你的樣本只有15組,數量較少,一般幾秒鍾就能訓練完成。
若從速度的角度出發,人腦神經元之間傳遞信息的速度要遠低於計算機,前者為毫秒量級,而後者的頻率往往可達幾百兆赫。但是,由於人腦是一個大規模並行與串列組合處理系統,因而,在許多問題上可以作出快速判斷、決策和處理,其速度則遠高於串列結構的普通計算機。人工神經網路的基本結構模仿人腦,具有並行處理特徵,可以大大提高工作速度。
10. BP人工神經網路
人工神經網路(artificialneuralnetwork,ANN)指由大量與自然神經系統相類似的神經元聯結而成的網路,是用工程技術手段模擬生物網路結構特徵和功能特徵的一類人工系統。神經網路不但具有處理數值數據的一般計算能力,而且還具有處理知識的思維、學習、記憶能力,它採用類似於「黑箱」的方法,通過學習和記憶,找出輸入、輸出變數之間的非線性關系(映射),在執行問題和求解時,將所獲取的數據輸入到已經訓練好的網路,依據網路學到的知識進行網路推理,得出合理的答案與結果。
岩土工程中的許多問題是非線性問題,變數之間的關系十分復雜,很難用確切的數學、力學模型來描述。工程現場實測數據的代表性與測點的位置、范圍和手段有關,有時很難滿足傳統統計方法所要求的統計條件和規律,加之岩土工程信息的復雜性和不確定性,因而運用神經網路方法實現岩土工程問題的求解是合適的。
BP神經網路模型是誤差反向傳播(BackPagation)網路模型的簡稱。它由輸入層、隱含層和輸出層組成。網路的學習過程就是對網路各層節點間連接權逐步修改的過程,這一過程由兩部分組成:正向傳播和反向傳播。正向傳播是輸入模式從輸入層經隱含層處理傳向輸出層;反向傳播是均方誤差信息從輸出層向輸入層傳播,將誤差信號沿原來的連接通路返回,通過修改各層神經元的權值,使得誤差信號最小。
BP神經網路模型在建立及應用過程中,主要存在的不足和建議有以下四個方面:
(1)對於神經網路,數據愈多,網路的訓練效果愈佳,也更能反映實際。但在實際操作中,由於條件的限制很難選取大量的樣本值進行訓練,樣本數量偏少。
(2)BP網路模型其計算速度較慢、無法表達預測量與其相關參數之間親疏關系。
(3)以定量數據為基礎建立模型,若能收集到充分資料,以定性指標(如基坑降水方式、基坑支護模式、施工工況等)和一些易獲取的定量指標作為輸入層,以評價等級作為輸出層,這樣建立的BP網路模型將更准確全面。
(4)BP人工神經網路系統具有非線性、智能的特點。較好地考慮了定性描述和定量計算、精確邏輯分析和非確定性推理等方面,但由於樣本不同,影響要素的權重不同,以及在根據先驗知識和前人的經驗總結對定性參數進行量化處理,必然會影響評價的客觀性和准確性。因此,在實際評價中只有根據不同的基坑施工工況、不同的周邊環境條件,應不同用戶的需求,選擇不同的分析指標,才能滿足復雜工況條件下地質環境評價的要求,取得較好的應用效果。