2012-09-14 3 views
2

J'écris un programme pour faire un réseau de neurones en python J'essaie de configurer l'algorithme de rétropropagation. L'idée de base est que je regarde à travers 5000 exemples d'entraînement et recueille les erreurs et trouve dans quelle direction je dois déplacer les thetas et ensuite les déplacer dans cette direction. Il y a les exemples d'apprentissage, puis j'utilise une couche cachée, puis une couche de sortie. Cependant, je reçois le dégradé/dérivé/erreur ici parce que je ne déplace pas les thêta correctement car ils doivent être déplacés. Je mets 8 heures dans ce aujourd'hui pas sûr de ce que je fais mal. Merci de votre aide!!Backpropagation pour réseau neuronal - Python

x = 401x5000 matrix 

y = 10x5000 matrix # 10 possible output classes, so one column will look like [0, 0, 0, 1, 0... 0] to indicate the output class was 4 

theta_1 = 25x401 

theta_2 = 10x26 


alpha=.01 

    sigmoid= lambda theta, x: 1/(1 + np.exp(-(theta*x))) 


     #move thetas in right direction for each iteration 
     for iter in range(0,1): 
      all_delta_1, all_delta_2 = 0, 0 
      #loop through each training example, 1...m  
      for t in range(0,5000): 

       hidden_layer = np.matrix(np.concatenate((np.ones((1,1)),sigmoid(theta_1,x[:,t])))) 
       output_layer = sigmoid(theta_2,hidden_layer) 

       delta_3 = output_layer - y[:,t] 
       delta_2= np.multiply((theta_2.T*delta_3),(np.multiply(hidden_layer,(1-hidden_layer)))) 

       #print type(delta_3), delta_3.shape, type(hidden_layer.T), hidden_layer.T.shape 
       all_delta_2 += delta_3*hidden_layer.T 
       all_delta_1 += delta_2[1:]*x[:,t].T 



      delta_gradient_2 = (all_delta_2/m) 
      delta_gradient_1 = (all_delta_1/m) 
      theta_1 = theta_1- (alpha * delta_gradient_1) 
      theta_2 = theta_2- (alpha * delta_gradient_2) 
+0

merci pour le mélangeur d'édition. également pour plus de clarté je veux ajouter que mon delta_gradient_2, et delta_gradient_1 sont les bonnes tailles de matrice. c'est juste que leurs valeurs sont inexactes. quand j'augmente les itérations à 20 et que je mesure la précision avec une fonction de coût, le coût diminue d'environ 20 itérations et recommence à remonter. mais même au niveau de coût le plus bas, l'algorithme de mon thêta n'est pas précis. – appleLover

Répondre

0

Il semble que vos dégradés correspondent à la couche de sortie non encapsulée.

Essayez de remplacer output_layer = sigmoid(theta_2,hidden_layer) par output_layer = theta_2*hidden_layer.

Ou de recalculer les dégradés pour la sortie écrasée.