2014-09-28 48 views
0

有人可以檢查我猜測輸入/隱藏/輸出層和整體參數中的神經元的數量是否正確。MATLAB中特定人工神經網絡的體系結構

我此ANN的想法:

輸入神經元:784(28x28)
隱藏層:1種
尺寸隱藏層(多個)的:25
激活函數:登陸乙狀結腸
訓練方法:梯度下降
數據大小:400 + 200

有400個bmp圖像用於訓練它,並有200個用於檢查(但只有1-50會被100%的比率和其他0%的比率估計... )

clear all; 
clc 
for kk=1:400 
    pl=ones(28,28);      %³õʼ»¯28*28¶þֵͼÏñΪȫ°× 
    m=strcat('b',int2str(kk),'.bmp'); %Á¬½Ó×Ö·ûµÃµ½Ñù±¾ÎļþÃû 
    x=imread(m,'bmp');     %¶ÁÈëÑб¾ÎļþͼÏñ 
    pl=im2bw(x,0.5);     %°ÑÑù±¾Í¼Ïñת»¯Îª¶þֵͼ 
    for m=0:27       %ÐγÉÉñ¾­ÍøÂçÊäÈëÏòÁ¿ 
     p(m*28+1:(m+1)*28,kk)=pl(1:28,m+1); 
    end 
end 
%ÊÖдÌåÑù±¾¶ÔÓ¦µÄÊý×Ö£¨´Ób1.bmpµ½b400.bmp ¹²400¸ö£©£º 
t=[5 0 4 1 9 2 1 3 1 4 3 6 3 6 1 7 2 8 6 9 4 0 9 1 1 2 4 3 2 7 8 8 6 9 0 5 6 0 7...... 
    6 1 8 7 9 3 9 8 5 9 3 3 0 7 4 9 8 0 9 4 1 4 4 6 0 4 5 6 1 0 0 1 7 1 6 3 0 2 1...... 
    1 7 8 0 2 6 7 8 3 9 0 4 6 7 4 6 8 0 7 8 3 1 5 7 1 7 1 1 6 3 0 2 9 3 1 1 0 4 9...... 
    2 0 0 2 0 2 7 1 8 6 4 1 6 3 4 1 9 1 3 3 9 5 4 7 7 4 2 8 5 8 6 0 3 4 6 1 9 9 6...... 
    0 3 7 2 8 2 9 4 4 6 4 9 7 0 9 2 7 5 1 5 9 1 2 3 1 3 5 9 1 7 6 2 8 2 2 6 0 7 4...... 
    9 7 8 3 2 1 1 8 3 6 1 0 3 1 0 0 1 1 2 7 3 0 4 6 5 2 6 4 7 1 8 9 9 3 0 7 1 0 2...... 
    0 3 5 4 6 5 8 6 3 7 5 8 0 9 1 0 3 1 2 2 3 3 6 4 7 5 0 6 2 7 9 8 5 9 2 1 1 4 4...... 
    5 6 4 1 2 5 3 9 3 9 0 5 9 6 5 7 4 1 3 4 0 4 8 0 4 3 6 8 7 6 0 9 7 5 7 2 1 1 6...... 
    8 9 4 1 5 2 2 9 0 3 9 6 7 2 0 3 5 4 3 6 5 8 9 5 4 7 4 2 7 3 4 8 9 1 9 2 1 7 9...... 
    1 8 7 4 1 3 1 1 0 2 3 9 4 9 2 1 6 8 4 7 7 4 4 9 2 5 7 2 4 4 2 1 9 2 2 8 7 6 9...... 
    8 2 3 8 1 6 5 1 1 0]; 
%´´½¨BPÍøÂç 
pr(1:784,1)=0; 
pr(1:784,2)=1; 
t1=clock;     %¼Æʱ¿ªÊ¼ 
%ÉèÖÃѵÁ·²ÎÊý 
net=newff(pr,[25 1],{'logsig','purelin'},'traingdx','learngdm'); 
net.trainParam.epochs=5000;    %ÉèÖÃѵÁ·´ÎÊý 
net.trainParam.goal=0.05;    %ÉèÖÃÐÔÄܺ¯Êý 
net.trainParam.show=10;     %ÿ10ÏÔʾ 
net.trainParam.Ir=0.05;     %ÉèÖÃѧϰËÙÂÊ 
net=train(net,p,t);      %ѵÁ·BPÍøÂç 
datat=etime(clock,t1)     %¼ÆËãÉè¼ÆÍøÂçµÄʱ¼äΪ66.417s 
%Éú³É²âÊÔÑù±¾ 
pt(1:784,1)=1;      
pl=ones(28,28);       %³õʼ»¯28*28¶þֵͼÏñÏñËØ 
for kk=401:600 
    pl=ones(28,28);      %³õʼ»¯28*28¶þֵͼÏñΪȫ°× 
    m=strcat('b',int2str(kk),'.bmp'); %Á¬½Ó×Ö·ûµÃµ½Ñù±¾ÎļþÃû 
    x=imread(m,'bmp');     %¶ÁÈëÑб¾ÎļþͼÏñ 
    pl=im2bw(x,0.5);     %°ÑÑù±¾Í¼Ïñת»¯Îª¶þֵͼ 
    for m=0:27       %ÐγÉÉñ¾­ÍøÂçÊäÈëÏòÁ¿ 
     pt(m*28+1:(m+1)*28,kk-400)=pl(1:28,m+1); 
    end 
end 
[a,Pf,Af]=sim(net,pt);     %ÍøÂç·ÂÕæ 
a=round(a)        %Êä³öʶ±ð½á¹û 
%²âÊÔÑù±¾¶ÔÓ¦µÄÊý×Ö£¨´Ób401.bmpµ½b600.bmp ¹²200¸ö£©£º 
tl=[2 6 4 5 8 3 1 5 1 9 2 7 4 4 4 8 1 5 8 9 5 6 7 9 9 3 7 0 9...... 
    0 6 6 2 3 9 0 7 5 4 8 0 9 4 1 1 8 7 1 2 6 1 0 3 0 1 1 8 2 0 3 9 4 0 5 0 6 1 7...... 
    7 8 1 9 2 0 5 1 2 2 7 3 5 4 4 7 1 8 3 9 6 0 3 1 1 2 0 3 5 7 6 8 2 9 5 8 5 7 4...... 
    1 1 3 1 7 5 5 5 2 5 8 2 0 9 7 7 5 0 9 0 0 8 9 2 4 8 1 6 1 6 5 1 8 3 4 0 5 5 8...... 
    3 4 2 3 9 2 1 1 5 2 1 3 2 8 7 3 7 2 4 6 9 7 2 4 2 8 1 1 3 8 4 0 6 5 9 3 0 9 2...... 
    4 7 1 1 9 4 2 6 1 8 9 0 6 6 7]; 
k=0; 
for i=1:200 
    if a(i)==tl(i) 
     k=k+1; 
    end 
end 
rate=1.00*k/200;      %¼ÆËã×îºóÕýÈ·ÂÊΪ0.495 
+0

我不確定你在這裏要求什麼。這是關於神經網絡體系結構,還是代碼中存在產生不需要結果的問題?你能否提供更多信息?謝謝。 – 2014-09-29 03:33:43

+0

是的馬修,它是關於神經網絡。我在pudn找到了這個例子,我想看看我是否正確理解了NN的拓撲結構(什麼是輸入和輸出等)。謝謝 – Munsta 2014-09-29 18:13:57

回答

0

我可能是錯的,因爲您沒有指定輸出神經元的數量和數據集中每個類的模式數量。但是,您似乎只爲您的網絡創建了一個輸出神經元。在這種情況下,網絡將所有模式分配到相同的類別,並且您獲得的分類準確度等於先驗概率。例如,如果數據集中的前50個模式屬於同一個類,其餘的則屬於不同的類,則具有一個輸出的分類器會將所有模式分配給第一個類,因此您將得到前50個。

如果是這種情況,您應該創建一個帶有N個輸出的分類器,其中N是數據集中類的數量。在這種情況下,分類器將爲每個類投票,並將該模式​​分配給具有最大輸出的類。例如,如果您有3個類,並且特定模式的輸出爲[0.2,0.83,0.6],則該模式將被分配給第二類。

此外,將圖像轉換爲黑白圖像可能不是最好的方法。將圖像轉換爲灰度(以在一定程度上保留直方圖)會更好,並使用一些歸一化來彌補光照差異。

最後,請記住,神經網絡本質上檢測輸入向量之間的相似性。所以,如果你需要對圖片進行分類,你需要找到一個表示,以便類似的圖像產生相似的輸入向量。將像素的值饋送到分類器中不是這樣的表示。例如,如果顛倒圖像,輸入矢量將完全改變,即使它仍然顯示相同的對象。你不想那樣。您需要的是取決於所示對象的功能,而不是照明/角度等。但是,提取這些功能完全不同(例如,請參閱OpenCV框架中的image preprocessingfeature extraction的一些示例,標準圖像處理和計算機視覺如果你對神經網絡而不是圖像處理感興趣,最好從UCI repository(例如,虹膜花,威斯康星乳腺癌)開始,並用它們練習一些標準分類問題直到您產生好的結果並且對使用的工具感覺舒適。

+0

輸入神經元呢,784是正確的還是?這不是我的設計,它來自pudn.com上的一些例子。我會等待你修改答案,但你100%正確,我認爲你知道很多有關ANN的知識,因爲你猜測前50張圖片會被猜到。當在MATLAB R2010a中運行時,這個ANN的成功率爲25%+/- 0.1%。我明天會接受答案,所以我不打破你的編輯。 'TheSting'的PS bluenote? – Munsta 2014-09-30 18:32:25

+0

如果將像素饋送到網絡中,則28 * 28 = 784是正確的。然而,這通常不是一個好主意(我編輯答案的細節)。 PS:來自布魯斯吉他音階的「bluenote」,我不記得電影中的馬:) – 2014-10-01 11:16:18

+0

Hehehe好男人! – Munsta 2014-10-03 11:35:07