2013-02-26 37 views
2

我想用MATLAB來訓練一個簡單的前饋網絡。它計算異或。這裏是我的代碼:如何訓練一個能夠使用MATLAB計算XOR的神經網絡?

net = feedforwardnet([3]); 
P = [0 0; 0 1; 1 0; 1 1]'; 
T = [0 1 1 0]; % desired output 
net = configure(net, P, T); 
net.trainParam.goal = 1e-8; 
net.trainParam.epochs = 1000; 
net = train(net, P, T); 

它說目標得到滿足。然而,我沒有得到所需的輸出:

sim(net, P) 

1.4885 0.6830 0.7796 0.3879 

我錯過了什麼嗎?

回答

4

您需要更多培訓示例。重複其中的一些。

在我來說,我想:

net = feedforwardnet([3]); 
%Repeat 4 times 
P = [0 0; 0 1; 1 0; 1 1; 0 0; 0 1; 1 0; 1 1; 0 0; 0 1; 1 0; 1 1; 0 0; 0 1; 1 0; 1 1]'; 
T = [0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0]; % desired output 
net = configure(net, P, T); 
net.trainParam.goal = 1e-8; 
net.trainParam.epochs = 1000; 
net = train(net, P, T); 

,其結果是

sim(net, P) 

ans = 
    Columns 1 through 8 
    0.0000 1.0000 1.0000 0.0000 0.0000 1.0000 1.0000 0.0000 
    Columns 9 through 16 
    0.0000 1.0000 1.0000 0.0000 0.0000 1.0000 1.0000 0.0000 
+0

呀。最後我做到了。但我仍然有一些疑問: 1)不是一個時代基本上是一個迭代?我認爲,當我定義時代= 1000時,我說「看看,用'P'和'T'來訓練網絡'網絡',如果需要的話,再用999重複這個過程。 2)我很習慣Encog(Java框架),我喜歡寫代碼[像這樣](http://www.heatonresearch.com/wiki/Hello_World)。它可能在MATLAB中得到目前的錯誤? – user3680 2013-02-28 22:24:50

+0

@ user3680是的,時代是這樣的,但是你告訴神經網絡MAXIMUM紀元,如果他達到了更快的精度就會停止,爲什麼1000紀元,如果在1紀元輸出是正確的?你說過:「如果需要」。對不起,我不知道Java,也沒有Encog .... – 2013-03-01 10:09:44

+0

@ user3680順便說一句,如果答案已幫助您標記爲正確請;;) – 2013-03-01 10:10:29