當前位置:首頁 » 算力簡介 » 神經網路訓練算力

神經網路訓練算力

發布時間: 2021-07-09 03:35:42

❶ 怎麼將數據輸入訓練好的神經網路運算啊 我的神經網路訓練好了,檢驗網路不會,怎麼進行運算也不會了

利用Y=sim(net,P),模擬一下跟原來的輸入比較一下。。。

❷ 神經網路訓練0到9十個數字需要多少樣本

看你的各種要求,如果只是練習mnist手寫體字元的話我推薦7:3

❸ 神經網路訓練最後的收斂圖 best training performance is NaN at。。。什麼意思,是沒有收斂嗎

NaN意思是Not A Number,除非是發散,不過一般不會出現這種情況。可能你的程序有錯。

如果是新定義演算法的話理論上的收斂要證明,可以證明它在迭代次數趨近無窮的時候等於某一解,也可以證明它滿足李普希茲條件(就是帶有完備范數和李普希茲常數的那個),這種情形下我們叫做收斂,要是用已有演算法或者乾脆就是BP演算法的時候不需要你證明.理論上不收斂的情況是這樣,當迭代次數趨近無窮的時候,權向量的解不唯一.
實際上的收斂是這樣,給定一個最大迭代次數n,一個誤差限erl,反向傳播演算法應該很容易找,我不往上寫了,每一步權值修正都會使er減小,直觀的看就是權向量的分量沿著梯度減小的方向在前進,雖然理論上樣本足夠大並且n趨於無窮的時候會收斂,但是實際上有可能出現當迭代到第n次,誤差er依然大於誤差限erl的情況,也就是說我們沒有解出來滿足要求的權向量,所以網路訓練失敗,叫做不收斂.當然,也可以使用梯度限來作為迭代終止的條件,這種情況下不收斂就是梯度在迭代了n次以後沒有小於某一值,從而沒有求出滿足要求的權向量;收斂就是求出了滿足梯度限的權向量.

❹ matlab神經網路訓練一般需要多少數據

只要你覺得這些數據能把握住你要解決的問題了,夠這個問題的學習了,就夠了。幾十到上百萬都是有可能的。一般數據多一些更有利於精度。

❺ 急急急!!幫忙解釋一下我的神經網路訓練結果圖的含義!越詳細越好!

我最近也要學習神經網路 跟樓主探討探討 樓主用9輸入1輸出兩個隱層 迭代次數10000次 用時1分鍾 progess左方是目標值(不太確定) 右方是訓練精度目標 迭代10000次後有效性檢驗為6次無錯誤 梯度接近目標精度 最終的均方差也接近目標值 樓主的神經網路訓練應該是成功的 接下來可以直接做模擬了 (增加迭代次數應該可以增加精度,不過只要差不多就可以了)

❻ 什麼神經網路訓練學習學習有哪幾種方式

神經網路的學習演算法很多 , 根據一種廣泛採用的分類方法 , 可將神經網路的學習演算法
歸納為 3 類 。 一類是有導師學習 , 一類為無導師學習 , 還有一類是灌輸式學習 。

《人工神經網路教程》(韓力群)

❼ 神經網路訓練為什麼效果不佳

那是肯定有影響的。你這樣理解,就像你讓一個復雜的結構構造的機器去學習一個東西,和你用一個構造簡單的機器去學習一個東西,它們理解的會一樣嗎?而且關於隱含層神經元個數還有幾個公式來推測它可能的神經元個數,你可以查查看,如果沒有影響...

❽ 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));
}
}

❾ 這個神經網路訓練有沒有梯度消失,或者梯度爆炸,具體怎麼看阿

增加網路的非線性能力,從而擬合更多的非線性過程。ReLU在一定程度上能夠防止梯度消失,但防止梯度消失不是用它的主要原因,主要原因是求導數簡單。一定程度是指,右端的不會趨近於飽和,求導數時,導數不為零,從而梯度不消失,但左端問題依然存在,一樣掉進去梯度也會消失。所以出現很多改進的ReLU。

❿ 如果有足夠的計算能力,神經網路理論真的能100%模擬人腦嗎

不能。
現在的計算機是邏輯計算機,感性思考能力很差勁,量子計算機依舊很遙遠。

就目前理論和工程實踐,無論神經網路演算法規模有多大,等真正想要機器人動一根手指還是老老實實的用C++或其他語言寫程序。

神經網路本質是一種信息處理演算法,只有編程才能讓機器人產生行為。目前還沒有理論可以整合兩者,即:我們並不能通過信息的處理實現自動編程的目的,我們也無法通過編程產生程序員無法預測的信息。缺少這個基礎談模擬人腦,只能說我們連毛都沒摸到。

熱點內容
收到假eth幣 發布:2025-10-20 08:58:16 瀏覽:973
暗黑破壞神2eth打孔 發布:2025-10-20 08:42:58 瀏覽:105
BTC和CBT是一樣的嗎 發布:2025-10-20 08:42:57 瀏覽:233
華碩trx40Pro供電 發布:2025-10-20 08:33:26 瀏覽:432
曬人民幣編號的朋友圈 發布:2025-10-20 08:25:32 瀏覽:687
doge格式 發布:2025-10-20 08:02:00 瀏覽:382
以太坊會爆發嗎 發布:2025-10-20 08:01:59 瀏覽:772
一台比特幣礦機的功率 發布:2025-10-20 07:39:24 瀏覽:925
trx輔助帶 發布:2025-10-20 07:35:29 瀏覽:48
比特幣哈希值有多少位 發布:2025-10-20 07:31:20 瀏覽:633