GotAI.NET

Форум: Проблемы искусственного интеллекта

 

Регистрация | Вход

 Все темы | Новая тема Стр.1 (1)   Поиск:  
 Автор Тема: В чём может быть проблема обучения?
Buggy
Сообщений: 28
В чём может быть проблема обучения?
Добавлено: 22 мар 07 12:27
int iterations = 0;
double sch = 5.0;
double x = 0.0;
double y = 0.0;

assignRandomWeights();

while(1)
{
x = 0.0;
y = 0.0;
while(1)
{
inputs[0] = x;
inputs[1] = y;

y += 1.0;

if(y > sch)
{
x += 1.0;
y = 0.0;
}
if(x > sch) break;

target[0] = 1.0;
target[1] = 0.0;
target[2] = 0.0;
target[3] = 0.0;
feedForward();
backPropagate();
}

x = sch + 1;
y = 0.0;
while(1)
{
inputs[0] = x;
inputs[1] = y;

y += 1.0;

if(y > sch)
{
x += 1.0;
y = 0.0;
}
if(x > (sch + sch + 1)) break;

target[0] = 0.0;
target[1] = 1.0;
target[2] = 0.0;
target[3] = 0.0;
feedForward();
backPropagate();
}

x = sch + sch + 2;
y = 0.0;
while(1)
{
inputs[0] = x;
inputs[1] = y;

y += 1.0;

if(y > sch)
{
x += 1.0;
y = 0.0;
}
if(x > (sch + sch + sch + 2)) break;

target[0] = 0.0;
target[1] = 0.0;
target[2] = 1.0;
target[3] = 0.0;
feedForward();
backPropagate();
}
if(iterations++ > 300000) break;
}

char t[100];

inputs[0] = 1.0;
inputs[1] = 2.0;
feedForward();
sprintf(t, "1) %f %f %f %f", actual[0], actual[1], actual[2], actual[3]);
MessageBox(NULL,t, NULL, 0);

inputs[0] = 7.0;
inputs[1] = 3.0;
feedForward();
sprintf(t, "2) %f %f %f %f", actual[0], actual[1], actual[2], actual[3]);
MessageBox(NULL,t, NULL, 0);

inputs[0] = 14.0;
inputs[1] = 4.0;
feedForward();
sprintf(t, "3) %f %f %f %f", actual[0], actual[1], actual[2], actual[3]);
MessageBox(NULL,t, NULL, 0);

Запускаю, всё работает на отлично, но проблема вот в чём:
1) 0.126043 0.888372 0.000399 0.000037 <-- Здесь первый элемент должен был быть больше всех, а оказался второй
А во всех остальных идет всё нормально, как надо, на втором MessageBox второй больше всех, на третьем - третий.
В чем может быть проблема?
[Ответ][Цитата]
гость
82.207.57.*
На: В чём может быть проблема обучения?
Добавлено: 01 май 07 16:39
double sigmoidDerivative( double val )
{
return ( val * (1.0 - val) );
}

Коли val==1, тоді (erro[out] = (target[out] - actual[out]) * sigmoidDerivative( actual[out] )) ==0 через множення на 0. Звідси випливає, що коефіцієнти не оновлюються!!!!!!!

МАКС max_ol@yahoo.com
[Ответ][Цитата]
daner
Сообщений: 4593
На: В чём может быть проблема обучения?
Добавлено: 01 май 07 19:43
Цитата:
Автор: гость

double sigmoidDerivative( double val )
{
return ( val * (1.0 - val) );
}

Коли val==1, тоді (erro[out] = (target[out] - actual[out]) * sigmoidDerivative( actual[out] )) ==0 через множення на 0. Звідси випливає, що коефіцієнти не оновлюються!!!!!!!

МАКС max_ol@yahoo.com


Уважайте читателей!!! вас не заставляют на английском писать, но если вы не заметили, то уточню - это русскоязычный ресурс интернета. Хотите ответ, выражайте мысли понятно.
[Ответ][Цитата]
 Стр.1 (1)