導航:首頁 > 網路設置 > 訓練bp神經網路需要多少組輸入

訓練bp神經網路需要多少組輸入

發布時間:2023-06-13 14:59:55

1. 神經網路對輸入變數個數有沒有要求,六十個可以嗎

可以,但是網路規模太大,很臃腫,需要調整的參數過多,影響收斂速度。

關於隱層節點數:在BP 網路中,隱層節點數的選擇非常重要,它不僅對建立的神經網路模型的性能影響很大,而且是訓練時出現「過擬合」的直接原因,但是目前理論上還沒有一種科學的和普遍的確定方法。 目前多數文獻中提出的確定隱層節點數的計算公式都是針對訓練樣本任意多的情況,而且多數是針對最不利的情況,一般工程實踐中很難滿足,不宜採用。事實上,各種計算公式得到的隱層節點數有時相差幾倍甚至上百倍。為盡可能避免訓練時出現「過擬合」現象,保證足夠高的網路性能和泛化能力,確定隱層節點數的最基本原則是:在滿足精度要求的前提下取盡可能緊湊的結構,即取盡可能少的隱層節點數。研究表明,隱層節點數不僅與輸入/輸出層的節點數有關,更與需解決的問題的復雜程度和轉換函數的型式以及樣本數據的特性等因素有關。
在確定隱層節點數時必須滿足下列條件:
(1)隱層節點數必須小於N-1(其中N為訓練樣本數),否則,網路模型的系統誤差與訓練樣本的特性無關而趨於零,即建立的網路模型沒有泛化能力,也沒有任何實用價值。同理可推得:輸入層的節點數(變數數)必須小於N-1。
(2) 訓練樣本數必須多於網路模型的連接權數,一般為2~10倍,否則,樣本必須分成幾部分並採用「輪流訓練」的方法才可能得到可靠的神經網路模型。
總之,若隱層節點數太少,網路可能根本不能訓練或網路性能很差;若隱層節點數太多,雖然可使網路的系統誤差減小,但一方面使網路訓練時間延長,另一方面,訓練容易陷入局部極小點而得不到最優點,也是訓練時出現「過擬合」的內在原因。因此,合理隱層節點數應在綜合考慮網路結構復雜程度和誤差大小的情況下用節點刪除法和擴張法確定。

2. bp神經網路對輸入數據和輸出數據有什麼要求

p神經網路的輸入數據越多越好,輸出數據需乎衫要反映網路的聯想記憶和預測能力。

BP網路能學習和存貯大量的輸入-輸出模式映射關系,而無需事前揭示描述這種映射關系的數學方程。它的學習規則是使用最速下降法,通過反向傳播來不斷調整網路的權值和閾值,使網路的誤差平方和最小。

BP神經網路模型拓輪態撲結構包括輸入層(input)、隱層(hide layer)和輸出層(output layer)。BP網路具有高度非線性和較強的泛化能力,但也存在收斂速度慢、迭代步數多、易於陷入局部極小和全局搜索能力差等缺點。

(2)訓練bp神經網路需要多少組輸入擴展閱讀:

BP演算法主要思想是:輸入學習樣本,使用反向傳播演算法對網路的權值和偏差進行反復的調整訓練,使輸出的向量與期望向量盡可能地接近,當網路歲桐腔輸出層的誤差平方和小於指定的誤差時訓練完成,保存網路的權值和偏差。

1、初始化,隨機給定各連接權及閥值。

2、由給定的輸入輸出模式對計算隱層、輸出層各單元輸出

3、計算新的連接權及閥值,計算公式如下:

4、選取下一個輸入模式對返回第2步反復訓練直到網路設輸出誤差達到要求結束訓練。

3. 神經網路遺傳演算法函數極值尋優

對於未知的非線性函數,僅通過函數的輸入輸出數據難以准確尋找函數極值。這類問題可以通過神經網路結合遺傳演算法求解,利用神經網路的非線性擬合能力和遺傳演算法的非線性尋優能力尋找函數極值。本文用神經網路遺傳演算法尋優如下非線性函數極值,函數表達式為

函數圖形如下圖1所示。

從函數方程和圖形可以看出,該函數的全局最小值為0,對應的坐標為(0,0)。雖然從函數方程和圖形中很容易找出函數極值及極值對應坐標,但是在函數方程未知的情況下函數極值及極值對應坐標就很難找到。

神經網路遺傳演算法函數極值尋優主要分為BP神經網路訓練擬合和遺傳演算法極值尋優兩步,演算法流程如下圖2所示。

神經網路訓練擬合根據尋優函數的特點構建合適的BP神經網路,用非線性函數的輸出數據訓練BP網路,訓練後的BP神經網路就可以預測函數輸出。遺傳演算法極值尋優把訓練後的BP神經網路預測結果作為個體適應度值,通過選擇、交叉和變異操作尋找函數的全局最優值及對應輸入值。
本文根據非線性函數有2個輸入參數、1個輸出參數,確定BP神經網路結構為2-5-1.取函數的4 000組輸入輸出數據,從中隨機選取3 900組數據訓練網路,100組數據測試網路性能,網路訓練好後用於預測非線性函數輸出。
遺傳演算法中個體採用實數編碼,由於尋優函數只有2個輸入參數,所以個體長度為2。個體適應度值為BP神經網路預測值,適應度值越小。交叉概率為0.4,變異概率為0.2。

用函數輸入輸出數據訓練BP神經網路,使訓練後的網路能夠擬合非線性函數輸出,保存訓練好的網路用語計算個體適應度值。根據非線性函告讓信數方程隨機得到該函數的4 000組輸入輸出數據,存儲於data.mat中,其中input為函數輸入數據,output為函數對應輸出數據,從中隨機抽取3 900組訓練數據訓練網路,100組測試數據測試網路擬合性能。最後保存訓練好的網路。

把訓練好的BP神經網路預測輸出作為個體適應度值。

BP神經網路擬合結果分析
本文中個體的適應度值為BP神經網路預測值,因此BP神經網路預測精度對於最優位置的尋找具有非常重要的意義。由於尋優非線性函數有2個輸入參數、1個輸出參數,所以構建的BP神經網路的結構為2-5-1。共取非線性函數4 000組輸入輸出數據,從中隨機選擇3 900組數據訓練BP神經網路,100組數據作為測試數據測試BP神經網路擬合性能,BP神經網路預測輸出和期望輸出對比如下圖3所示。

從BP神經網路預測結果可以看出,BP神經網路可以准確預測非線性函數輸出,可以把網路預測近似看成函數實際輸出。

遺傳演算法尋優結果分析 BP神經網路訓練結束後,可以利用遺傳演算法尋找該非線性函數的最小值。遺傳演算法的迭代次數是100次,種群規模是20,交叉概率為0.4,變異概率為0.2,採用浮點數編碼,個體長度為21,優化過程中最優個體適應度值變化曲線如下圖4所示。

本文所使用的方法有比較重要的工程應用價值,比如對於某項試驗來說,試驗目的是獲取到最大試驗結果對應的實驗條件,但是由於時間和經費限制,該試驗只能進行有限次,可能單靠試驗結果找不到最優的試驗條件。這時可以在已知試驗數據的基礎上,通過本文介紹的神經網路遺傳演算法尋找最優試驗條件。
思路就是先根據試驗條件數和試驗結果數確定BP神經網路結構;然後把試驗條件作為輸入數據,滑叢試驗結果作為輸出數據訓練BP網路,使得訓練後的網路襪輪可以預測一定試驗條件下的試驗結果;最後把試驗條件作為遺傳演算法中的種群個體,把網路預測的試驗結果作為個體適應度值,通過遺傳演算法推導最優試驗結果及其對應試驗條件。

4. 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));
}
}

5. BP神經網路matlab編程問題,給出11個輸入數據和2個輸出數據,進行訓練的程序。要求能運行並出相應的結果

給你一個我的程序,如果自己做不了可以聯系我:1526208341
動量梯度下降演算法訓練 BP 網路
訓練樣本定義如下:
輸入矢量為
p =[-1 -2 3 1
-1 1 5 -3]
目標矢量為 t = [-1 -1 1 1]

close all
clear
echo on
clc
% NEWFF——生成一個新的前向神經網路
% TRAIN——對 BP 神經網路進行訓練
% SIM——對 BP 神經網路進行模擬
pause
% 敲任意鍵開始
clc
% 定義訓練樣本
% P 為輸入矢量
P=[-1, -2, 3, 1; -1, 1, 5, -3];
% T 為目標矢量
T=[-1, -1, 1, 1];
pause;
clc
% 創建一個新的前向神經網路
net=newff(minmax(P),[3,1],{'tansig','purelin'},'traingdm')
% 當前輸入層權值和閾值
inputWeights=net.IW{1,1}
inputbias=net.b{1}
% 當前網路層權值和閾值
layerWeights=net.LW{2,1}
layerbias=net.b{2}
pause
clc
% 設置訓練參數
net.trainParam.show = 50;
net.trainParam.lr = 0.05;
net.trainParam.mc = 0.9;
net.trainParam.epochs = 1000;
net.trainParam.goal = 1e-3;
pause
clc
% 調用 TRAINGDM 演算法訓練 BP 網路
[net,tr]=train(net,P,T);
pause
clc
% 對 BP 網路進行模擬
A = sim(net,P)
% 計算模擬誤差
E = T - A
MSE=mse(E)
pause
clc
echo off

6. matlab用於BP神經網路編程,輸入數據在TXT文件裡面

fscanf函數我不太了解,一般數值可以存在xls或csv文檔中,由txt文件轉到csv文件極其簡單。然後由csvread或xlsread函數讀取,直接可以存到矩陣中。
一個樣本是矩陣的一列,而不是行。(當然歸一化是以行為單位的)

7. 菜鳥求教,BP神經網路在訓練時,我的輸入P不止一組那該怎麼訓練呀。

神經網路訓練本來就是多組數據進行的。一組輸入對應一個輸出,n組輸入完成後得到n組輸出,計算n組輸出與n個實際值的誤差,調整網路參數

閱讀全文

與訓練bp神經網路需要多少組輸入相關的資料

熱點內容
訪問管理中如何設置電腦端網路 瀏覽:255
網路營銷和鏈接資源 瀏覽:739
網路電話任意選哪個 瀏覽:242
萬源網路營銷多少錢 瀏覽:528
海康威視主機怎麼設置網路連接 瀏覽:362
網路百度文庫哪個好 瀏覽:802
網路設備伺服器怎麼連接 瀏覽:321
網路安全日常防範技巧 瀏覽:8
手機時間選擇網路時間但是不準 瀏覽:729
網路維修和維護是什麼 瀏覽:371
湖北廣電網路哪個是網口 瀏覽:687
電腦網線插路由器沒網路 瀏覽:826
工行網路銀行怎麼登錄手機銀行 瀏覽:792
手機網路二維碼共享給幾個人 瀏覽:248
福建網路營業執照哪裡辦理 瀏覽:293
iphone電信網路設置 瀏覽:818
企業遇到網路造謠誹謗如何應對 瀏覽:609
如何處理華為nova4網路問題 瀏覽:963
網路安全及個人信息保護 瀏覽:722
湛江自主可控計算機網路服務 瀏覽:950

友情鏈接