Uczę się o sieciach neuronowych, szczególnie patrząc na MLP z wdrożeniem propagacji wstecznej. Próbuję zaimplementować własną sieć w Pythonie i pomyślałem, że zanim zacznę, zajrzę do innych bibliotek. Po kilku poszukiwaniach znalazłem implementację Pythona Neila Schemenauera bpnn.py. (http://arctrix.com/nas/python/bpnn.py)Backpropagation sieci neuronowej Pythona
Pracując przez kod i czytać pierwszą część Christopher M. Bishop książce zatytułowanej „Sieci neuronowe Pattern Recognition” Znalazłem problem w funkcji backPropagate:
# calculate error terms for output
output_deltas = [0.0] * self.no
for k in range(self.no):
error = targets[k]-self.ao[k]
output_deltas[k] = dsigmoid(self.ao[k]) * error
Linia kod, który oblicza błąd, jest inny w książce Bishops. Na stronie 145, równanie 4.41 definiuje błąd urządzenia wyjściowe jak:
d_k = y_k - t_k
Gdzie y_k są wyjścia i t_k są cele. (Używam _ reprezentuje indeks) Więc moje pytanie brzmi powinien ten wiersz kodu:
error = targets[k]-self.ao[k]
Bądź rzeczywiście:
error = self.ao[k] - targets[k]
jestem najprawdopodobniej całkowicie błędne, ale może ktoś pomóc jasne moje zamieszanie proszę. Dzięki
Ponieważ błąd jest taki, jak wynik w tej epoce jest oddalony od oczekiwanego, powinna to być właściwa linia: 'error = targets [k] -self.ao [k]' Ale oba mogą być prawidłowe, zależy to również od sygnału 'dsigmoid (self.ao [k])'. –
Bez względu na to, czy wywodzisz (y-t)^2, czy (t-y)^2 w stosunku do y, nie ma różnicy, zawsze jest to y-t, nigdy t-y. – alfa