обучение нейронной сети с использованием проблемы обратного распространения

Это код, который я использовал для классификации рукописных цифр базы данных MNist с использованием алгоритма обратного распространения на однослойном персептроне с 10 нейронами. Цифры сохраняются в расширенном (1в последнем столбце) целочисленная двумерная матрица images[60000][785] и этикетки в int tlabels[60000][10], Каждый ярлык содержит 1 в положении, соответствующем значению цифр и 0в остальном (цифры 09).

// weights1[785][10] has been initialized to random values on [-0.5,0.5] in the constructor.
// bias of neurons have been taken into account as the last row of the matrix.
// b is the learning rate , equal to 0.5.

const int Ninput=784;
const int Noutput=10;
float result[Noutput];
for (int epoch =0 ; epoch < 30 ; epoch ++) {
float error =0;
for (int sample=0 ; sample < 1000 ; sample++) {

for (int output= 0 ; output< Noutput; output++) {
float sum = 0;
for (int input = 0 ; input < Ninput+1; input++)
sum += weights1[input][output]*images[sample][input];
result[output] = sum;
}
float delta[Noutput];
for (int output= 0 ; output< Noutput;  output++) {
delta[output]=(tlabels[sample][output]-sigmoid(result[output]))*sigmoidDerivative(result[output]);
error+= pow((tlabels[sample][output]-sigmoid(result[output])),2.0);
}
for (int output= 0 ; output< Noutput; output++)
for (int input=0 ; input < Ninput+1 ; input++)
weights1[input][output] = weights1[input][output] +b*delta[output]*images[sample][input];
}
cout << error / 1000.0;
}

error переменная сходится к 0,9, что означает, что этот код классифицирует все цифры в один из классов, хотя выборки равномерно распределены по классам. Есть ли логическая ошибка в коде, или я должен попробовать другие наборы параметров, пока результаты не станут приемлемыми?

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector