Une seule couche de réseau de neurones

Pour la mise en œuvre d'une seule couche de réseau de neurones, j'ai deux fichiers de données.

In:
    0.832 64.643
    0.818 78.843

Out:
    0 0 1
    0 0 1

Ci-dessus est le format de 2 fichiers de données.

La cible de sortie est à "1" pour une catégorie donnée d'entrée correspondantes appartient et "0" pour les 2 autres sorties.

Le problème est comme suit:

Votre seule couche de réseau de neurones va
trouver Un (3 par 2 de la matrice) et b (3 en 1
vector) de Y = A*X + b où Y est [C1,
C2, C3]' et X est [x1, x2]'.

Pour résoudre le problème ci-dessus avec un
réseau de neurones, on peut ré-écrire l'
l'équation comme suit: Y = A' * X' où
A' = [A b] (3 par 3 de la matrice) et X' est
[x1, x2, 1]'

Maintenant, vous pouvez utiliser un réseau de neurones avec
trois nœuds d'entrée (l'un de x1, x2 et
1 respectivement) et trois sorties (C1,
C2, C3).

L'résultant 9 (puisque nous avons 9
les connexions entre 3 entrées et 3
sorties) poids sera équivalent à
éléments d'Une " matrice.

Fondamentalement, je suis en train de faire quelque chose comme cela, mais ça ne fonctionne pas:

function neuralNetwork   
    load X_Q2.data
    load T_Q2.data
    x = X_Q2(:,1);
    y = X_Q2(:,2);

    learningrate = 0.2;
    max_iteration = 50;

    % initialize parameters
    count = length(x);
    weights = rand(1,3); % creates a 1-by-3 array with random weights
    globalerror = 0;
    iter = 0;
    while globalerror ~= 0 && iter <= max_iteration
        iter = iter + 1;
        globalerror = 0;
        for p = 1:count
            output = calculateOutput(weights,x(p),y(p));
            localerror = T_Q2(p) - output
            weights(1)= weights(1) + learningrate *localerror*x(p);
            weights(2)= weights(1) + learningrate *localerror*y(p);
            weights(3)= weights(1) + learningrate *localerror;
            globalerror = globalerror + (localerror*localerror);
        end 
    end 

J'écris cette fonction dans un autre fichier et de l'appeler dans mon code précédent.

function result = calculateOutput (weights, x, y)
    s = x * weights(1) + y * weights(2) + weights(3);
    if s >= 0
        result = 1;
    else
        result = -1;
    end
InformationsquelleAutor user414981 | 2010-08-11