J'essaie de former un réseau neuronal artificiel avec deux couches convolutionnelles (c1, c2) et deux couches cachées (c1, c2). J'utilise l'approche de rétropropagation standard. Dans la passe arrière, je calcule le terme d'erreur d'une couche (delta) en fonction de l'erreur de la couche précédente, des poids de la couche précédente et du gradient de l'activation par rapport à la fonction d'activation de la couche actuelle. Plus précisément, le delta de la couche l ressemble à ceci:
delta(l) = (w(l+1)' * delta(l+1)) * grad_f_a(l)
Je suis capable de calculer le gradient de c2, qui se connecte à une couche régulière. Je multiplie simplement les poids de h1 avec son delta. Ensuite, je remodèle cette matrice sous la forme de la sortie de c2, la multiplie par le gradient de la fonction d'activation et j'ai terminé.
J'ai maintenant le terme delta de c2 - qui est une matrice 4D de taille (featureMapSize, featureMapSize, filterNum, patternNum). De plus, j'ai les poids de c2, qui sont une matrice 3D de taille (filterSize, filterSize, filterNum).
Avec ces deux termes et le gradient d'activation de c1 je veux calculer le delta de c1.
Longue histoire courte:
Étant donné le terme delta d'une couche convolutionnelle précédente et les poids de cette couche, comment puis-je calculer le terme delta d'une couche convolutionnelle?