[PYTHON] [Deep Learning from scratch] Implémentation de couche de la fonction softmax à l'erreur d'entropie croisée

introduction

Cet article est une sortie facile à comprendre de ** Deep Learning from scratch Chapter 6 Error back propagation method **. J'ai pu le comprendre moi-même, j'espère donc que vous pourrez le lire confortablement. De plus, je serais plus qu'heureux que vous puissiez vous y référer lorsque vous étudiez ce livre.

Implémentation de la couche de la couche de sortie à la fonction de perte

Je voudrais faire l'implémentation de la couche de la couche de sortie à la fonction de perte, qui est la dernière pièce pour implémenter le processus de propagation arrière dans le réseau neuronal.

Cette fois, je voudrais implémenter des couches de la fonction softmax utilisée pour la classification à l'erreur d'entropie d'intersection, mais cette partie sera presque la même implémentation même lorsque l'erreur de somme des carrés utilisée pour la régression, donc je pense que cela peut être fait en faisant référence à cela. Je vais.

class SoftmaxWithLoss: #Fonction Softmax + couche d'erreur d'entropie croisée
    def __init__(self):
        self.loss = None #Valeur de la fonction de perte
        self.y = None #Résultat de la fonction softmax
        self.t = None #Données des enseignants
        
    def forward(self, x, t):
        if t.ndim == 1: #Les bonnes réponses en sont une-Si ce n'est pas chaud, réparez-le
            new_t = []
            for i in t:
                oh = list(np.zeros(10)) #Nombre d'étiquettes de classification
                oh[i] = 1
                new_t.append(oh)
            t = np.array(new_t)
        self.t = t
        self.y = softmax_function(x)
        self.loss = cross_entropy_errors(self.t, self.y)
        
        return self.loss
    
    def backward(self, dout=1):
        batch_size = self.t.shape[0]
        dx = (self.y - self.t) / batch_size #Divisez l'erreur par le nombre de données pour correspondre au badge
        
        return dx

Dans le processus de propagation avant, seules les données de réponse correctes de la méthode one-hot peuvent être utilisées avec la fonction softmax, donc si les données de réponse correctes ne sont pas one-hot en premier, changez-les en one-hot.

Après cela, appelez et utilisez la fonction softmax et la méthode d'erreur d'entropie d'intersection que vous avez créées jusqu'à présent.

Le processus de rétropropagation est simple: soustrayez les données de réponse correctes des données prédites pour obtenir l'erreur, additionnez-la, puis obtenez la moyenne. Pour dire la vérité, la raison pour laquelle la combinaison de la fonction softmax / erreur d'entropie croisée et de la fonction d'égalité / erreur de somme des carrés est ajustée de sorte que le processus de rétro-propagation puisse être obtenu par la formule simple ci-dessus est ajustée de sorte que les deux fonctions Parce que c'était fait.

Par conséquent, comme je l'ai dit au début, le processus de rétropropagation doit être mis en œuvre comme ci-dessus même dans le cas de la fonction constante et de l'erreur de la somme des carrés.

Recommended Posts

[Deep Learning from scratch] Implémentation de couche de la fonction softmax à l'erreur d'entropie croisée
Deep Learning from scratch ① Chapitre 6 "Techniques liées à l'apprentissage"
Apprentissage profond à partir de zéro
[Mémo d'apprentissage] Apprentissage profond à partir de zéro ~ Mise en œuvre de l'abandon ~
[Deep Learning from scratch] J'ai essayé d'implémenter la couche sigmoïde et la couche Relu
Apprentissage profond / entropie croisée
Python vs Ruby "Deep Learning from scratch" Chapitre 4 Implémentation de la fonction de perte
Fonction d'apprentissage profond / softmax
[Deep Learning from scratch] J'ai implémenté la couche Affine
[Deep Learning from scratch] J'ai essayé d'expliquer le décrochage
Apprentissage profond à partir de zéro 1 à 3 chapitres
[Deep Learning from scratch] Implémentation de la méthode Momentum et de la méthode AdaGrad
J'ai essayé d'implémenter Perceptron Part 1 [Deep Learning from scratch]
Apprentissage profond à partir de zéro (calcul des coûts)
Mémo d'apprentissage profond créé à partir de zéro
Apprentissage amélioré pour apprendre de zéro à profond
[Mémo d'apprentissage] Le Deep Learning fait de zéro [Chapitre 7]
Apprentissage profond à partir de zéro (propagation vers l'avant)
Apprentissage profond / Apprentissage profond à partir de zéro 2-Essayez de déplacer GRU
Deep learning / Deep learning made from scratch Chapitre 6 Mémo
[Mémo d'apprentissage] Deep Learning fait de zéro [Chapitre 5]
[Mémo d'apprentissage] Le Deep Learning fait de zéro [Chapitre 6]
Alignement d'image: du SIFT au deep learning
"Deep Learning from scratch" avec Haskell (inachevé)
Deep learning / Deep learning made from scratch Chapitre 7 Mémo
[Windows 10] Construction de l'environnement "Deep Learning from scratch"
[Deep Learning from scratch] À propos de l'optimisation des hyper paramètres
Mémo d'auto-apprentissage "Deep Learning from scratch" (partie 12) Deep learning
[Mémo d'apprentissage] Deep Learning fait de zéro [~ Chapitre 4]
Mémo d'auto-apprentissage "Deep Learning from scratch" (glossaire illisible)
"Deep Learning from scratch" Mémo d'auto-apprentissage (n ° 9) Classe MultiLayerNet
GitHub du bon livre "Deep Learning from scratch"
Apprentissage profond / rétropropagation d'erreur de la fonction sigmoïde
Deep Learning from scratch Chapter 2 Perceptron (lecture du mémo)
Deep Learning from scratch La théorie et la mise en œuvre de l'apprentissage profond appris avec Python Chapitre 3
Introduction à l'apprentissage profond ~ Fonction de localisation et de perte ~
Résumé Python vs Ruby "Deep Learning from scratch"
[Deep Learning from scratch] Valeur initiale du poids du réseau neuronal utilisant la fonction sigmoïde
Mémo d'auto-apprentissage «Deep Learning from scratch» (10) Classe MultiLayerNet
Mémo d'auto-apprentissage «Deep Learning from scratch» (n ° 11) CNN
Contre-mesures pour l'erreur "Impossible d'obtenir le répertoire supérieur" lors de l'utilisation du Deep Learning ② fait à partir de zéro avec le spyder d'ANACONDA
"Deep Learning from scratch" Mémo d'auto-apprentissage (n ° 16) J'ai essayé de créer SimpleConvNet avec Keras
Python vs Ruby "Deep Learning from scratch" Chapitre 3 Graphique de la fonction step, fonction sigmoid, fonction ReLU
"Deep Learning from scratch" Mémo d'auto-apprentissage (n ° 17) J'ai essayé de créer DeepConvNet avec Keras
Osez apprendre avec Ruby "Deep Learning from scratch" Importation de fichiers pickle depuis PyCall interdit
[Deep Learning from scratch] Poids initial du réseau neuronal lors de l'utilisation de la fonction Relu
Mémo d'auto-apprentissage «Deep Learning from scratch» (n ° 19) Augmentation des données
Application de Deep Learning 2 à partir de zéro Filtre anti-spam
Othello ~ De la troisième ligne de "Implementation Deep Learning" (4) [Fin]
DataNitro, implémentation de la fonction de lecture des données de feuille
[Deep Learning from scratch] J'ai essayé d'expliquer la confirmation du gradient d'une manière facile à comprendre.
[Deep Learning from scratch] Implémentez le traitement de rétropropagation dans le réseau neuronal par la méthode de propagation de retour d'erreur
Chapitre 2 Implémentation de Perceptron Ne découpez que les bons points de Deeplearning à partir de zéro
[Partie 4] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques
Essayez de créer un réseau de neurones / d'apprentissage en profondeur avec scratch
Un amateur a trébuché dans le Deep Learning à partir de zéro Note: Chapitre 1
[Partie 1] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques
[Partie 3] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques
Un amateur a trébuché dans le Deep Learning ❷ fait à partir de zéro Note: Chapitre 5
Créez un environnement pour "Deep Learning from scratch" avec Docker