2017-09-13 31 views
-6

我必須在Matlab(2-10-2)中製作一個簡單的3層神經網絡。如何在MATLAB中使用自定義神經網絡功能圖像

我曾在Matlab的卷積神經網絡工作,並希望與簡單的神經網絡架構進行比較。

我有14000圖像的每個類,有兩個類在輸入和兩個類將在輸出。輸入處的圖像大小爲56x56 = 3136。
1)如何製作2-10-2 NN架構。

2)另外我的圖像是RGB所以它的56x56x3所以輸入矩陣將是9408?關於在輸入x如果兩個類。對於每個班級,x1的尺寸爲3161x700,x2的尺寸爲9408x700,x輸入的最終尺寸爲9408x1400,標籤爲1x1400

+0

@Cody Gray。問題已更新 – Addee

回答

1

如果你看一下feedforwardnet MATLAB help page有這樣的例子:

[x,t] = simplefit_dataset; 
net = feedforwardnet(10); 
net = train(net,x,t); 
view(net) 
y = net(x); 
perf = perform(net,y,t) 

這幾乎是你想要的。前饋網絡可以採用一系列不同的隱藏層大小,因此我們可以這樣做:

net = feedforwardnet([2 10 2]); 

獲得您想要的體系結構。您不必擔心輸入圖層大小或輸出圖層大小。這些設置爲'0',並根據您在訓練期間提供給網絡的輸入和輸出(示例中爲net)自動設置爲正確的大小。你的情況,你可以重塑你的56x56矩陣劃分成3136x1載體:

x = reshape(x,3161,1); 

所以,按照上面的例子中,請確保您的類/目標標籤是在tx您相應的輸入,你是好去。

這就是說,我不會使用這些網絡之一來分類圖像。 ConvNets通常是要走的路。

要分割的輸入數據(x和t)的訓練,驗證和測試集和具有訓練功能自動照顧泛化能力那樣,訓練之前:

net.divideFcn = 'dividerand'; 
net.divideParam.trainRatio = 0.7; 
net.divideParam.valRatio = 0.15; 
net.divideParam.testRatio = 0.15; 

將其組合在一起,我們有:

[x,t] = simplefit_dataset; 
net = feedforwardnet(10); 
net.divideFcn = 'dividerand'; 
net.divideParam.trainRatio = 0.7; 
net.divideParam.valRatio = 0.15; 
net.divideParam.testRatio = 0.15; 
net = train(net,x,t); 
view(net) 
y = net(x); 
perf = perform(net,y,t) 
+1

Martin,我理解爲'feedforwardnet'。 1)關於輸入'x'是否有兩個類。對於每個類'x1'將具有大小'3161x700'和'x2'將具有大小'3161x700'是否正確? 2)我們如何將大量數據用於培訓和驗證?我怎樣才能分開 3)測試數據將類似於像'3161x100'這樣的輸入,每個班級如何測試? – Addee

+1

查看我的更新回答。訣竅是使用內置的divideFcn,它根據您提供的比例來劃分您的訓練數據。 –

+0

Martin我已更新我的問題,正在回答。只是與第二部分有些混淆。如果您請更新您的問題 – Addee

-3

對於2類分類問題單輸出邏輯神經元就足夠了。 (2-10-1)的NN架構就足夠了。

+0

我理解爲feedforwardnet。 1)關於輸入x如果兩個類。對於每個班級,x1的尺寸爲3161x700,x2的尺寸爲3161x700,這是正確的嗎? 2)我們如何將大量數據用於培訓和驗證?我怎麼能分開3)測試數據將類似於像3161x100這樣的輸入,如何進行測試? – Addee

+1

雖然這是真的,但單個輸出足以區分兩個類,有兩個獨立的輸出神經元有好處。例如,在兩個輸出神經元上具有softmax輸出,可爲您提供一個類似一個類的概率輸出,並在所有類輸出上標準化。 –