Dla biblioteki sieci neuronowych zaimplementowałem kilka funkcji aktywacyjnych i funkcji strat oraz ich pochodne. Można je łączyć dowolnie, a pochodna na warstwach wyjściowych staje się po prostu produktem pochodnej straty i pochodnej aktywacyjnej.Jak zaimplementować pochodną Softmax niezależnie od funkcji straty?
Jednak nie udało mi się wprowadzić pochodnej funkcji aktywacji Softmax niezależnie od funkcji straty. Ze względu na normalizację, tj. Mianownik w równaniu, zmiana pojedynczej aktywacji wejściowej zmienia wszystkie aktywacje wyjścia, a nie tylko jedną.
Oto moja implementacja Softmax, w której pochodna nie przejdzie sprawdzania gradientu o około 1%. Jak mogę zaimplementować pochodną Softmax, aby można ją było połączyć z jakąkolwiek funkcją straty?
import numpy as np
class Softmax:
def compute(self, incoming):
exps = np.exp(incoming)
return exps/exps.sum()
def delta(self, incoming, outgoing):
exps = np.exp(incoming)
others = exps.sum() - exps
return 1/(2 + exps/others + others/exps)
activation = Softmax()
cost = SquaredError()
outgoing = activation.compute(incoming)
delta_output_layer = activation.delta(incoming) * cost.delta(outgoing)
dla jacobian_m [i] [j] = s [i] * (1-s [i]) Wystąpił błąd TypeError: obiekt 'numpy.float64' nie obsługuje przypisania pozycji w jaki sposób poprawisz to dla numpy matrycy wejściowej ? –