『壹』 多層次漸進式空間采樣網路體系設計
結合區位論、空間插值、智能空間推理等知識,多層次漸進式空間采樣網路體系主要包括多層次漸進式空間采樣網路框架設計、最優樣本量獲取、采樣樣點布設等幾個方面。
( 一) 多層次漸進式空間采樣網路框架設計
當前空間采樣網路設計主要包括基於模型的方法和基於設計的方法。基於模型的方法主要採用統計學中采樣模型、優化模型等,運用采樣網路設計規則 ( 包括克里金方差最小原則、WM 原則等) 自動生成采樣網路; 基於設計的方法則主要依據專家對研究區域的先驗知識,人工布設采樣樣點形成采樣網路。兩種方法均存在一定的不足,基於模型的方法存在一定的不穩定性,基於設計的方法則受專家主觀意識的影響。基於此,本研究提出多層次漸進式空間采樣網路框架設計技術,集合了基於模型方法和基於設計方法各自的優點,旨在消除采樣網路設計過程中客觀不確定性和主觀不一致性的影響,使得采樣網路客觀反映研究區的區域特徵,提高采樣和監測精度。
多層次漸進式空間采樣網路框架設計技術充分考慮了研究區存在監測樣點布局和不存在監測樣點布局兩種情況,首先基於采樣模型自動計算最優樣本量並完成樣點布設,然後根據專家的先驗知識以及空間采樣數據對采樣網路進行優化,剔除異常點,從而提高采樣精度和效率。
( 二) 最優樣本量獲取
在總體中抽出一定量的樣本,用所抽樣本的均值與方差能較好地估計總體的均值與方差,即抽取樣本的均值具有足夠的精度和較大概率近似於總體均值。
當所研究的屬性在統計學上具有正態分布特徵時,可構造統計量公式,在專家指導下( 包括專家對於研究區的先驗知識和預采樣數據等) 推導出采樣需要置信限下的合理采樣數:
退化廢棄地遙感信息提取研究
式中:η為采樣精度;μ為總體均值;σ為標准差;xn為第n個采樣點。
上述樣本量為指定采樣精度下的最小樣本量,從而既保證了采樣精度,又提高了采樣效率。
(三)采樣樣點布設
傳統的空間采樣網路設計較多依靠專家對研究區以及監測指標的先驗知識,按著一定的布點方法人工確定樣點布局,常用的布點方法包括功能區布點法和幾何圖形布點法,其中幾何圖形布點法包括網格布點法、同心圓布點法和扇形布點法。隨著抽樣理論和地統計學理論的發展,簡單隨機抽樣模型、系統抽樣模型和分層抽樣模型等抽樣模型被廣泛應用。
1.簡單隨機抽樣
簡單隨機抽樣是指從總體N個單位中任意抽取n個單位作為樣本,使每個可能的樣本被抽中的概率相等。簡單隨機抽樣分為重復抽樣和不重復抽樣。在重復抽樣中,每次抽中的單位仍放回總體,樣本中的單位可能不止一次被抽中;不重復抽樣中,抽中的單位不再放回總體,樣本中的單位只能抽中一次。簡單隨機抽樣的具體方法包括抽簽法和隨機數字表法。
2.系統抽樣
系統抽樣是純隨機抽樣的變種,先將總體從1~N相繼編號,並計算抽樣距離K=N/n(N為總體單位總數,n為樣本容量),然後在1~K中抽一隨機數k1作為樣本的第一個單位,接著取k1+K,k1+2K,…,直至抽夠n個單位為止。系統抽樣要防止周期性偏差,因為其會降低樣本的代表性。
3.分層抽樣
又稱分類抽樣或類型抽樣,先將總體的單位按某種特徵分為若干次級總體(層),然後再從每一層內進行單純隨機抽樣,組成一個樣本。將總體劃分為若干個同質層,再在各層內隨機抽樣或系統抽樣,分層抽樣的特點是將科學分組法與抽樣法結合在一起,分組減小了各抽樣層變異性的影響,抽樣保證了所抽取的樣本具有足夠的代表性。
分層抽樣根據在同質層內抽樣的方式不同,又可分為一般分層抽樣和分層比例抽樣,一般分層抽樣是根據樣品變異性大小來確定各層的樣本容量,變異性大的層多抽樣,變異性小的層少抽樣,在事先並不知道樣品變異性大小的情況下,通常多採用分層比例抽樣。
分層抽樣比單純隨機抽樣所得到的結果准確性更強,組織管理更方便,而且能保證總體中每一層都有個體被抽到。這樣除了能估計總體的參數值,還可以分別估計各個層內的情況,因此分層抽樣技術常被採用。
將上述模型應用到空間采樣領域,通過引入空間相關系數表徵樣點之間的空間結構性,結合傳統采樣模型動態計算最優樣本量並進行樣點布設,通過專家的指導對布設的樣點進行優化,從而使樣點布局與指標空間結構基本吻合,提高了采樣精度。
『貳』 想做一份調查問卷,樣本量應該取多少
按照每個學校30-50份答卷來取就可以了,如果有5個學校,大概到150-200份就足夠了。30份是一個底限,如果你有足夠的預算,多些樣本也不錯
『叄』 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));
}
}
『肆』 殘差網路
殘差網路(Resial Network簡稱ResNet)是在2015年繼Alexnet Googlenet VGG三個經典的CNN網路之後提出的,並在ImageNet比賽classification任務上拔得頭籌,ResNet因其簡單又實用的優點,現已在檢測,分割,識別等領域被廣泛的應用。
ResNet可以說是過去幾年中計算機視覺和深度學習領域最具開創性的工作,有效的解決了隨著網路的加深,出現了訓練集准確率下降的問題,如下圖所示:
做過深度學習的同學應該都知道,隨著網路層數的增加而導致訓練效果變差的一個原因是梯度彌散和梯度爆炸問題(vanishing/exploding gradients),這個問題抑制了淺層網路參數的收斂。但是這個問題已經通過一些參數初始化的技術較好的解決了,有興趣的同學可以看參考文獻中的以下幾篇文章:[2][3][4][5][6]。
但是即便如此,在網路深度較高的時候(例如圖中的56層網路)任然會出現效果變差的問題,我們在先前的Alexnet Googlenet VGG三個模型中可以看出,網路的深度在圖片的識別中有著至關重要的作用,深度越深能自動學習到的不同層次的特徵可能就越多,那到底是什麼原因導致了效果變差呢?
Fig. 3
左側19層的VGG模型的計算量是 19.6 billion FLOPs 中間是34層的普通卷積網路計算量是3.6 billion FLOPs。
右邊是34層的ResNet計算量是3.6billion FLOPs,圖中實線的箭頭是沒有維度變化的直接映射,虛線是有維度變化的映射。通過對比可以看出VGG雖然層數不多但是計算量還是很大的,後面我們可以通過實驗數據看到34層的ResNet的表現會比19層的更好。
從圖中可以看出在效果上,34層的殘差網路比VGG和GoogleNet都要好,A,B,C三種方案中C方案效果最好,但是B,C方案在計算量上比A方案要大很多,而效果提升的又很少,所以論文作者建議還是使用A方案較為實用。
下面我們介紹層數在50及以上的殘差網路的結構: Deeper Bottleneck Architectures。這種結構是作者為了降低訓練時間所設計的,結構對比如下圖所示:
ResNet通過殘差學習解決了深度網路的退化問題,讓我們可以訓練出更深的網路,這稱得上是深度網路的一個歷史大突破吧。也許不久會有更好的方式來訓練更深的網路,讓我們一起期待吧!
目前,您可以在 人工智慧建模平台 Mo 找到基於tensorflow 的34層的殘差網路(ResNet)實現樣例,數據集是CIFAR-10 (CIFAR的十分類數據集),這個樣例在測試集上的精度為90%,驗證集上的精度為98%。主程序在ResNet_Operator.py中,網路的Block結構在ResNet_Block.py中,訓練完的模型保存在results文件夾中。
項目源碼地址: http://momodel.cn/explore/5d1b0a031afd944132a0797d?type=app
參考文獻:
[1] _K. He, X. Zhang, S. Ren, and J. Sun. Deep resial learning for image recognition. arXiv preprint arXiv:1512.03385,2015.
[2] Y. LeCun, L. Bottou, G. B. Orr, and K.-R.M¨uller. Efficient backprop.In Neural Networks: Tricks of the Trade, pages 9–50. Springer, 1998.
[3] X. Glorot and Y. Bengio. Understanding the difficulty of training deep feedforward neural networks. In AISTATS, 2010.
[4] A. M. Saxe, J. L. McClelland, and S. Ganguli. Exact solutions to the nonlinear dynamics of learning in deep linear neural networks.arXiv:1312.6120, 2013.
[5] K. He, X. Zhang, S. Ren, and J. Sun. Delving deep into rectifiers:Surpassing human-level performance on imagenet classification. In ICCV, 2015.
[6] S. Ioffe and C. Szegedy. Batch normalization: Accelerating deep network training by recing internal covariate shift. In ICML, 2015.
Mo (網址: momodel.cn )是一個支持 Python 的 人工智慧在線建模平台 ,能幫助你快速開發、訓練並部署模型。
Mo 人工智慧俱樂部 是由網站的研發與產品設計團隊發起、致力於降低人工智慧開發與使用門檻的俱樂部。團隊具備大數據處理分析、可視化與數據建模經驗,已承擔多領域智能項目,具備從底層到前端的全線設計開發能力。主要研究方向為大數據管理分析與人工智慧技術,並以此來促進數據驅動的科學研究。
『伍』 人工神經網路分析需要樣本量一般多大
1.樣本量的確定是費用與精度的函數,取決於研究的精度和費用,特別是實踐中費用考慮的更多!
2.抽樣調查,特別是隨機抽樣,樣本有代表性,往往比普查更有效率,甚至精度更高,這里我們主要計算和討論抽樣誤差,非抽樣誤差是人為因素,考質量控制;
3.樣本量的確定有賴於隨機抽樣,或者說主要是針對隨機抽樣,需要統計推斷下的計算樣本量,如果是非概率抽樣,理論上沒有計算和控制樣本量的問題;
4.如果研究只要40-50個樣本,感覺上應該是非概率抽樣(依賴被訪者選擇方式)
5.即使是非概率抽樣,我們很多時候也採用概率和統計分析及推斷思想來進行數據分析和下結論!只是這種方法沒有完善的理論支持,或者說有可能因為研究者的主觀判斷失誤造成偏差;
6.無論是概率抽樣還是非概率抽樣,樣本量越大當然效果越好,結論越穩定(理論上說)
7.40-50個樣本在統計上屬於小樣本,t-檢驗,如果樣本大於60或理想120以上,t分布就是正態分布了,所以40個樣本在統計上是最小推斷總體的樣本,換句話說40-50個樣本是介於小樣本和正態分布大樣本的臨界樣本量;如果不嚴格的話40個樣本就可以比較總體之間的統計差異了;
8.所以,一般來講,針對一個研究對象和人群,要進行比較最少40個樣本,比如男女差異,應該各擁有40人(80人),或者說你們進行配額樣本的時候要保證統計比較的類別至少有40個樣本;
9.那麼40個樣本有代表性嗎? 當然越多越好,越有代表性
10.但如果調查對象非常一致,沒有差異,只要問一個人就行了,所以要考慮研究對象的差異性,如果差異大,當然樣本量要大,如果沒有差異,同質性較高樣本量就少;
11.總體的大小對樣本量的選擇沒有影響,調查研究一般必須在研究前明確總體是誰,大總體沒有影響(上萬人),中等總體有點影響(5000人),小總體有很大影響(千百個人);總體是你要推斷的人群;
12.再者要考慮研究對象在總體中擁有的比例(比如要找艾滋病人),如果比例非常低的話,需要大樣本才能找到;但往往商業研究就採用非概率抽樣了,比如滾雪球抽樣,專家判斷抽樣,配額抽樣等;
13.另外,選擇40個人,如果是經過我們主觀判斷的,有一種說法:叫條件概率,也就是我們越了解研究目的和對象,我們就越能夠做出正確判斷;比如P(A|B),也就是說我們越了解B事件發生的概率,那麼A發生的概率就越確定;就像我們在Google中搜東西,你的關鍵詞=B越准確,得到的結果A就越是你想要的東西;
14.當然,如果你的主觀判斷錯了,就會犯更大的錯誤
15.還有就是希望得到的精度;如果得到的結果是70%加減10%誤差我們可以接受,但如果是總體本身就不到8%,那8%加減10%,尾巴比頭都大顯然不行,當然到底如何確定精度,是研究前你們與客戶要明確的,事先研究設計確定的,不能事後來說;
16.記住:有時候我們研究本身不需要那麼高的精度
17.整個研究設計過程的質量控制可以更有效提升研究品質
18.研究測試的技術(接近自然科學儀器測量)可獲得更好研究品質
19.根據精確的抽樣,需要採用精確的統計分析,否則也達不到效果
20.任何研究都不會完美,都是權衡和保守的過程,總的來講保守不犯錯
21.如果研究有實驗設計和研究設計,所以實驗設計,包括所謂雙盲實驗、正交設計、拉丁方格等,確定樣本分組是非常精細的,有助於研究品質;但設計缺陷會造成降低品質;
22.處置組和對照組的設計,主要應用在傳播效果、廣告效果研究上,需要有設計原則
23.實驗設計也強調對其它影響因素的控制,也就是X對Y的影響,要控制住Z的干擾,更能提高研究品質
24.被訪者的參與度(你的激勵方式)也重要,一分錢一分貨;我們是花錢買信息
25.任何理由都是可解釋的,但這里主要是要用術語,越專業越說行話,別人更相信,所以解釋樣本量的科學性,有時候要用科學,也就是理論;
26.因為有理論,顯得有水平,因為有水平就有話語權,就有執行力!所以權威部門的設計或出面,客戶就相信了!
27.研究過程,不斷修正,比如追加樣本也是解決問題的辦法
28.連續性研究,也會解決或減少對樣本量的需求
29.廣告效果研究經常採用rolling data的方式,因為廣告效果有延遲效應,每周50個樣本,4周一個分析,就是200樣本,第五周分析前4周,第六周分析2-5周數據,進行比較和檢驗,這是常有方法;
『陸』 BP神經網路學習樣本是不是越多越好!
這個沒有明確要求,樣本也不是越多越好。通常情況下,你的樣本可以一部分用來做驗證。加速你有100個樣本,90%用來做訓練,10%用來做驗證等,當然,有時候還得留下10%做測試用。我個人的經驗是,樣本數盡量在10以上吧。
『柒』 rbf神經網路的訓練樣本要多大
因課題而異。
1、樣本最關鍵在於正確性和准確性。你所選擇的樣本首先要能正確反映該系統過程的內在規律。我們從生產現場採得的樣本數據中有不少可能是壞樣本,例如由於測量儀器故障導致測量數據誤差較大等,這樣的樣本會干擾你的神經網路訓練。通常我們認為壞樣本只是個別現象,所以我們希望通過盡可能大的樣本規模來抵抗壞樣本造成的負面影響。
2、其次是樣本數據分布的均衡性。你所選擇的樣本最好能涉及到該系統過程可能發生的各種情況。例如某化工生產中某反應爐的溫度主要分布在350度—400度,且出現在380度的情況較多,那麼你的樣本數據最好也是在350-400度各種情況都有,並且也是在380度左右的樣本較多些,這樣可以極大可能的照顧到系統在各個情況下的規律特徵。通常我們對系統的內在規律不是很了解,所以我們希望通過盡可能大的樣本規模來「地毯式」覆蓋對象系統的方方面面。
3、再次就是樣本數據的規模,也就是你要問的問題。在確保樣本數據質量和分布均衡的情況下,樣本數據的規模決定你神經網路訓練結果的精度。樣本數據量越大,精度越高。還用剛才的例子,假如反應爐的溫度主要均勻分布在375-385度之間,那麼你用100個均衡分布在375-385度的訓練樣本去訓練,經過無限次或者說是足夠多次迭代之後,理論上你的神經網路的精度就是0.1度。如果你覺得0.1度足夠細膩了,那麼樣本規模為100也就可以接受了。由於樣本規模直接影響計算機的運算時間,所以在精度符合要求的情況下,我們不需要過多的樣本數據,否則我們要等待很久的訓練時間。
補充說明一下,不論是徑向基(rbf)神經網路還是經典的bp神經網路,都只是具體的訓練方法,對於足夠多次的迭代,訓練結果的准確度是趨於一致的,方法隻影響計算的收斂速度(運算時間),和樣本規模沒有直接關系。