Я пытаюсь обучить очень простую нейронную сеть с одним персептроном, используя двумерный входной вектор (x1, x2).
Я реализовал то, что я думаю, является правильным обратным распространением ниже. Используя возвращенный весовой вектор, я получаю линию, которая находится далеко от границы принятия решения.
def train_nn(self, training_set, labels):
for _ in range(self.epochs):
preds = np.dot(self.weights.T, training_set.T)
z = sigmoid(preds)
error = z - labels
#back propogation - find derivative with respect to weights
derror_dy = error
dy_dz = sigmoid_deriv(preds)
derr_dz = derror_dy * dy_dz
derr_dweights = np.dot(training_set.T, derr_dz.T)
dz_dweights = self.lr * derr_dweights
self.weights -= dz_dweights
return self.weights
Я получаю правильную классификацию при выполнении прогноза с использованием весов.
Является ли неправильная граница из-за использования сигмоидальной функции? Или есть ошибка в моем расчете обратного распространения? Цени любую помощь!