Поэтому я попытался написать свою собственную нейронную сеть в Python (без использования каких-либо библиотек, кроме numpy и random для функции exp и random для функции обучения), я не могу понять, почему это не так учиться как следует ... Пожалуйста, помогите мне исправить это, чтобы оно работало. Я думаю, что проблема в функции обратного распространения / функции изменения веса, кто-нибудь видит что-то не так с расчетами?
def changeWeights(self):
i = 0
while i < self.layersAmount:
j = 0
while j < self.layers[i].amountOfNuerons:
k = 0
while k < len(self.layers[i].neurons[j].weights):
weight = self.layers[i].neurons[j].weights[k]
err = self.layers[i].neurons[j].error
ans = self.layers[i].neurons[j].ans
gradient = err * sigmoid_derivative(ans) * LEARNING_RATE
self.layers[i].neurons[j].weights[k] += gradient * ans
self.layers[i].neurons[j].bias += gradient
k += 1
j += 1
i += 1
def backprop(self, errors):
i = len(self.layers) - 1
for j in range(self.outputs):
self.layers[i].neurons[j].error = errors[j]
i -= 1
while i > -1:
k = 0
while k < len(self.layers[i].neurons):
sum = 0
for j in range(len(self.layers[i + 1].neurons)):
weight = self.layers[i + 1].neurons[j].weights[k]
sum += weight * self.layers[i + 1].neurons[j].error
self.layers[i].neurons[k].error = sum
k += 1
i -= 1
self.changeWeights()