2009-05-05 4 views

Antwort

3

Ich empfehle 'Step by Step Guide to Implementing a Neural Network in C' von John A. Bullinaria.

Dies ist sehr einfach durch zu gehen, wie ein mehrschichtiges neuronales Netzwerk zu implementieren, das in der Lage zu lernen, wie XOR ist.

Der in dem Artikel eingeführte Code ist in C, was sehr einfach zu verstehen ist. Die meisten "Einführung-zu-Neural-Netzwerk" -Artikel im Web sind objektorientiert und kommen in Form von wiederverwendbaren Bibliotheken, die es schwerer machen, verstanden zu werden und damit anzufangen.

0

Sie haben ein paar Antworten bekommen, die sich mit C-Code befassen, also hier ist an XOR demo for MATLAB. Die Demo ist für eine ältere Version von MATLAB (ver. 6) geschrieben und benötigt die Neural Network Toolbox, sollte aber hoffentlich noch einige Anregungen geben, wie man das Netzwerk implementiert.

EDIT: Für allgemeinere Informationen über Backpropagation Algorithmen in der Neural Network Toolbox, würde ich vorschlagen, die online documentation at The MathWorks website.

+0

schön, wieder von dir zu hören gnovice, ich würde gerne wissen, ob es ein Tutorial nur für backp ropagation gibt? ohne XOR .. – noob88

+0

Yup, gerade hinzugefügt einen Link für die Online-Dokumentation =) – gnovice

0

Ich schrieb eine here, die ich denke, ist wirklich sehr einfach. Oh was zur Hölle. Ich werde den Code hier einfach erneut veröffentlichen.

function layer2 = xornn2(iters) 
    if nargin < 1 
     iters = 50 
    end 
    T = [0 1 1 0]; 
    X = [0 0 1 1; 0 1 0 1; 1 1 1 1]; 
    m = size(T,2); 
    inputsz = size(X,1)-1; 
    hiddensz = 3; 
    outputsz = size(T,1); 
    theta1 = randn(hiddensz, 1+inputsz); 
    theta2 = randn(outputsz, 1+hiddensz); 
    for i = [1:iters] 
     layer1 = [logsig(theta1 * X); ones(1,m)]; 
     layer2 = logsig(theta2 * layer1); 
     delta2 = T - layer2; 
     delta1 = layer1 .* (1-layer1) .* (theta2' * delta2); 
     % remove the bias from delta 1. There's no real point in a delta on the bias. 
     delta1 = delta1(1:(end-1),:); 
     theta2d = delta2 * layer1'; 
     theta1d = delta1 * X'; 
     theta1 = theta1 + 0.1 * theta1d; 
     theta2 = theta2 + 0.1 * theta2d; 
    end 
end 

Die zufällige Initialisierung kann verbessert werden. (Ich würde es sqrt (6 ./ (Fanin + Fanout)) machen ... (Das ist von einer Zeitung von Yoshua Bengio ..) Aber es funktioniert im Grunde ... Versuch es mit xornn (10000) zum Beispiel in der Lage sein, hiddensz zu irgendetwas> = 2 zu ändern.

Verwandte Themen