Доброе времени суток!
Правильно ли я написан метод "backpropagation"? Мне некорректно считает считает веса для нейронов.
Переменные:
int inputs[3];//входные нейроны
double hidN[2];//нейроны скрытого слоя
double output;//выходной нейрон
double weight_1[3][2], weight_1_2[3][2];// веса для скрытого слоя
double weight_2[2], weight_2_2[2];//веса для выходного нейрона
double actual_predict;// актуальное предсказание
double learning_rate;// равен 0.08
double error_layer_2, gradient_layer_2, weights_delta_layer_2;
double error_layer_1[2], gradient_layer_1[2], weights_delta_layer_1[2];
Реализация:
void train(double expected_predict)
{
// делает предсказание
for (int i = 0; i < 2; i++)
hidN[i] = sigmoid((inputs[0] * weight_1[0][i]) + (inputs[1] * weight_1[1][i]) + (inputs[2] * weight_1[2][i]));
output = sigmoid((hidN[0] * weight_2[0]) + (hidN[1] * weight_2[1]));
actual_predict = output;
//корректирует веса для весов скрытого слоя(hidN)
error_layer_2 = actual_predict - expected_predict;
gradient_layer_2 = actual_predict*(1 - actual_predict);
weights_delta_layer_2 = error_layer_2 * gradient_layer_2;
for (int i = 0; i < 2; i++)// скорее всего здесь ошибка(
weight_2[i] = weight_2[i] - hidN[i] * weights_delta_layer_2 * learning_rate;
// корректирует веса для входных нейронов (inputs)
for (int i = 0; i < 2; i++)
{
error_layer_1[i] = weights_delta_layer_2 * weight_2[i];
gradient_layer_1[i] = hidN[i] * (1 - hidN[i]);
weights_delta_layer_1[i] = error_layer_1[i] * gradient_layer_1[i];
}
for (int i = 0; i < 3; i++)//или здесь
for (int j = 0; j < 2; j++)
weight_1[i][j] = weight_1_2[i][j] - inputs[i] * weights_delta_layer_1[j] * learning_rate;
}
Источник алгоритма: https://www.youtube.com/watch?v=HA-F6cZPvrg
Вопрос с полным кодом: Не могу правильно реализовать метод обратного распространения ошибки
Код с ошибкой:
weight_1[i][j] = weight_1_2[i][j] - inputs[i] * weights_delta_layer_1[j] * learning_rate;
Код без ошибки:
weight_1[i][j] = weight_1[i][j] - inputs[i] * weights_delta_layer_1[j] * learning_rate;
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости