Я разрабатываю ANN с обратной связью с обратной связью с 22 входами и 1 выходом (либо 1, либо 0). NN имеет 3 слоя и использует 10 скрытых нейронов. Когда я запускаю NN, он меняет весы чуть-чуть, а общая ошибка для выхода составляет около 40%. По сути, я думал, что это было закончено/подобрано, но после того, как я изменил количество скрытых нейронов, ничего не изменилось.Вес в обратной линии обратной связи ANN не изменяется
N- число входов (22)
М представляет собой количество скрытых нейронов (10)
Это код, который я использую для backpropagate
OIN рассчитывается выходной Перед вводом в функции сигмовидной
oout является выход после прохождения функции сигмовидной
double odelta = sigmoidDerivative(oin) * (TARGET_VALUE1[i] - oout);
double dobias = 0.0;
double doweight[] = new double[m];
for(int j = 0; j < m; j++)
{
doweight[j] = (ALPHA * odelta * hout[j]) + (MU * (oweight[j] - oweight2[j]));
oweight2[j] = oweight[j];
oweight[j] += doweight[j];
} // j
dobias = (ALPHA * odelta) + (MU * (obias - obias2));
obias2 = obias;
obias += dobias;
updateHidden(N, m, odelta);
Это код, который я использую для смены скрытых нейронов.
for(int j = 0; j < m; j++)
{
hdelta = (d * oweight[j]) * sigmoidDerivative(hin[j]);
for(int i = 0; i < n; i++)
{
dhweight[i][j] = (ALPHA * hdelta * inputNeuron[i]) + (MU * (hweight[i][j] - hweight2[i][j]));
hweight2[i][j] = hweight[i][j];
hweight[i][j] += dhweight[i][j];
}
dhbias[j] = (ALPHA * hdelta) + (MU * (hbias[j] - hbias2[j]));
hbias2[j] = hbias[j];
hbias[j] += dhbias[j];
} `
Как вы инициализируете свои веса? Не могли бы вы предоставить нам больше кода - как вы обновляете и инициализируете свою сеть? –
Я инициализирую его путем рандомизации весов между -1 и 1 – AZstudentCS