Регистрация | Вход
public void Backward(double[] expected) { double[][] deltas = new double[layers.Length][]; for (int i = layers.Length - 1; i >= 0; i--) { deltas[i] = new double[layers[i]]; if (i == layers.Length - 1) { for (int j = 0; j < layers[i]; j++) deltas[i][j] = (inputs[i][j] - expected[j]) * Derivative(inputs[i][j]); } else { for (int j = 0; j < layers[i]; j++) { double error = 0; for (int k = 0; k < layers[i + 1]; k++) error += deltas[i + 1][k] * weights[i + 1][k][j]; deltas[i][j] = error * Derivative(inputs[i][j]); } } for (int j = 0; j < layers[i]; j++) { biases[i][j] -= lr * deltas[i][j]; if (i > 0) { for (int k = 0; k < layers[i - 1]; k++) weights[i][j][k] -= lr * deltas[i][j] * inputs[i - 1][k]; } } } }