по какой-то причине мой алгоритм backprop делает мои веса NaN, я понятия не имею почему.Не все время, кажется, тоже случайно.Я не знаю, что вызывает NaN, но было бы полезно, если бы кто-нибудь мог объяснить.Вот код для backprop:
def backpropagate(self, data, iters=1, learning_rate=0.001):
inputs = [_set[0] for _set in data]
outputs = [_set[1] for _set in data]
for i in range(iters):
for j in range(len(inputs)):
output = outputs[j]
input = inputs[j]
expected = self.feed_forward(input) # expected output
state = self.feed_full(input)
error = output - expected # error
delta = error * self.activation_function(expected, True)
self.weights[len(self.weights) - 1] += np.transpose(state[len(self.weights)]).dot(delta) * learning_rate
for weight_layer in reversed(range(len(self.weights))):
i = weight_layer
error = delta.dot(self.weights[i].T) # updating error
delta = error * self.activation_function(state[i], True) # updating delta for each weight
self.weights[i] += np.transpose(state[i]).dot(delta) * learning_rate
Вот простая прямая передача для всех состояний сети:
def feed_full(self, x):
state = x
activations = [x]
for weight_layer in self.weights:
state = self.activation_function(np.dot(state, weight_layer))
activations.append(state)
return activations
Вот основной файл:
data = [[[1, 2], 3],
[[2, 2], 4],
[[3, 2], 5],
[[1, 1], 2],
[[0, 2], 2]]
input_set = [_set[0] for _set in data]
nn = NeuralNetwork([2, 1], linear)
print(nn.feed_forward(input_set))
nn.print_net()
nn.backpropagate(data, 10000)
nn.print_net()
print(nn.feed_forward(input_set))
Я должен упомянуть, что функция активации является классом, здесь:
class ActivationFunction:
def __init__(self, func, deriv):
self.func = func
self.deriv = deriv
def __call__(self, x, deriv=False):
if not deriv:
return self.func(x)
return self.deriv(x)
также здесь - журнал ошибок и ошибок для некоторых итераций, когда форма сети равна [2, 30,1].Выполнение 10000 итераций:
Delta: [-1.25834964e+20]
Error: [-5.39488342e+132]
Delta: [-5.39488342e+132]
Error: [-inf]
Delta: [-inf]
Error: [-inf]
Delta: [-inf]
Error: [nan]
Delta: [nan]
Error: [nan]
Delta: [nan]
Все функции активации работают нормально, но я продолжаю получать NaN.Любая помощь приветствуется, спасибо за ваше время.