La programmation d'une Base de Réseau de Neurones à partir de zéro dans MATLAB

J'ai posé quelques questions à propos des réseaux de neurones sur ce site dans le passé et ont obtenu d'excellents réponses, mais j'ai encore de la difficulté à mettre en œuvre une pour moi. C'est tout à fait une longue question, mais j'espère qu'elle servira de guide pour d'autres personnes à créer leur propre base de réseaux de neurones dans MATLAB, il devrait donc être en vaut la peine.

Ce que j'ai fait jusqu'à présent pourrait être tout à fait tort. Je suis en ligne de stanford de la machine en cours d'apprentissage par le Professeur Andrew Y. Ng et ont essayé de mettre en application ce qu'il a appris à faire de mon mieux.

Pouvez-vous svp me dire si l'alimentation de l'avant et de la fonction de coût parties de mon code sont corrects, et où je vais mal dans la minimisation (optimisation)?

J'ai une alimentation de couche 2 d'avance réseau de neurones.

Le code MATLAB pour l'anticipation de la partie est:

function [ Y ] = feedforward2( X,W1,W2)
%This takes a row vector of inputs into the neural net with weight matrices W1 and W2 and returns a row vector of the outputs from the neural net

%Remember X, Y, and A can be vectors, and W1 and W2 Matrices 

X=transpose(X);            %X needs to be a column vector
A = sigmf(W1*X,[1 0]);     %Values of the first hidden layer  
Y = sigmf(W2*A,[1 0]);     %Output Values of the network
Y = transpose(Y);          %Y needs to be a column vector

Ainsi, par exemple, une à deux couches de neurones net avec deux entrées et deux sorties ressemblerait un peu à ça:

      a1
x1 o--o--o y1      (all weights equal 1)
    \/ \/
    /\ /\
x2 o--o--o y2
      a2

si nous avons mis en:

X=[2,3];
W1=ones(2,2);
W2=ones(2,2);

Y = feedforward2(X,W1,W2)

nous obtenons le la sortie:

Y = [0.5,0.5]

Cela représente y1 et y2 valeurs indiquées dans le dessin du réseau neuronal

Le code MATLAB pour l'erreur quadratique de la fonction de coût est:

function [ C ] = cost( W1,W2,Xtrain,Ytrain )
%This gives a value seeing how close W1 and W2 are to giving a network that represents the Xtrain and Ytrain data
%It uses the squared error cost function
%The closer the cost is to zero, the better these particular weights are at giving a network that represents the training data
%If the cost is zero, the weights give a network that when the Xtrain data is put in, The Ytrain data comes out

M = size(Xtrain,1);  %Number of training examples

oldsum = 0;

for i = 1:M,
        H = feedforward2(Xtrain,W1,W2); 
        temp = ( H(i) - Ytrain(i) )^2;
        Sum = temp + oldsum;
        oldsum = Sum;
end

C = (1/2*M) * Sum;

end

Exemple

Ainsi, par exemple, si les données d'apprentissage est:

Xtrain =[0,0;        Ytrain=[0/57;
        1,2;           3/57;
        4,1;           5/57;
        5,2;           7/57;                                                           a1    
        3,4;           7/57;    %This will be for a two input one output network  x1 o--o y1
        5,3;           8/57;                                                          \/ \_o 
        1,5;           6/57;                                                          /\ /
        6,2;           8/57;                                                      x2 o--o      
        2,1;           3/57;                                                           a2    
        5,5;]          10/57;]

Nous commençons avec initiale aléatoire des poids

W1=[2,3;     W2=[3,2]
    4,1]

Si nous avons mis en:

Y= feedforward2([6,2],W1,W2)

Nous obtenons

Y = 0.9933 

Qui est loin de ce que les données d'apprentissage dit qu'il devrait être (8/57 = 0.1404). Donc, la première aléatoire des poids W1 et W2 où une mauvaise proposition.

De mesurer exactement comment le mauvais/bon une estimation aléatoire des poids de pondération sont, nous utilisons la fonction de coût:

C= cost(W1,W2,Xtrain,Ytrain)

Cela donne de la valeur:

C = 6.6031e+003

En minimisant la fonction de coût

Si nous minimiser la fonction de coût par la recherche de toutes les variables possibles, W1 et W2, puis ramasser le plus bas, le réseau qui se rapproche des données de formation

Mais quand j'utilise le code:

 [W1,W2]=fminsearch(cost(W1,W2,Xtrain,Ytrain),[W1,W2])

Il donne un message d'erreur. Il dit: "Erreur à l'aide de horzcat. CHAT arguments dimensions ne sont pas compatibles."Pourquoi j'obtiens ce message d'erreur et que puis-je faire pour le réparer?


Pouvez-vous svp me dire si l'alimentation de l'avant et de la fonction de coût parties de mon code sont corrects, et où je vais mal dans la minimisation (optimisation)?

Merci!!!!!!

OriginalL'auteur Blue7 | 2014-02-24