Модераторы: Rickert
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обратное распространение, Ошибка "моего" алгоритма 
V
    Опции темы
StandartenFuhrer
  Дата 20.3.2008, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 22.10.2006

Репутация: нет
Всего: нет



Дано:
3 входа,10 нейронов в скрытом слое и 1 на выход....подаю 20 образов... и в итоге выходное значение не "перешагнуло" отметку в 1.Помогите пожалуйста найти мою ошибку, а то темка ИИ интересна...но источники литературы вводять токо в заблуждение....

Переменные
Код


double[][] w1={        {0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05},
                    {0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05},
                    {0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05},
              };
double[] w2={    0.05,
                0.05,
                0.05,
                0.05,
                0.05,
                0.05,
                0.05,
                0.05,
                0.05,
                0.05};
double[][] y0={{7,4,5},
        {6,4,5},
        {7,5,6},
        {6,3,5},
        {8,5,6},
        {8,5,4},
        {8,3,4},
        {6,3,4},
        {6,3,6},
        {7,3,6},
        {6,5,6},
        {6,4,6},
        {7,5,5},
        {7,4,6},
        {7,6,6},
        {8,6,6},
        {7,6,7},
        {7,3,7},
        {5,4,5},
        {6,5,4}
        };
//double[] y1={0,0,0};
double[] y1={0,0,0,0,0,0,0,0,0,0};
double[] y2={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
double[][] d={    {52.09},
                {39.09},
                {49.16},
                {39.79},
                {64.16},
                {62.71},
                {63.25},
                {35.25},
                {36.70},
                {49.70},
                {36.16},
                {36.00},
                {52.25},
                {49.00},
                {48.30},
                {63.30},
                {47.14},
                {48.54},
                {28.09},
                {30.71}};
private double avarage=46.77;
private boolean checkAll=false;
private int checkCnt=0;
double s1[]={0,0,0,0,0,0,0,0,0,0};
double s2=0;
double[] delta_m2={0},delta_m1={0,0,0,0,0,0,0,0,0,0};
double delta2=0;
double delta1=0;
private boolean[] checkX={false,false,false,false,false,false,false,false,
                          false,false,false,false,false,false,false,false,
                          false,false,false,false};

просьба "не ругать" за массивы глупые...ибо планировалось несколько нейронов на выходе  smile 

Код

while(!checkAll)
                        {
                        for(int i=0;i<20;i++)
                            {s2=0;
                                for(int j=0;j<10;j++)
                                {
                                    s1[j]=w1[0][j]*y0[i][0]+w1[1][j]*y0[i][1]+w1[2][j]*y0[i][2];
                                    y1[j]=1/(1+Math.exp(-(s1[j])));
                                    s2+=w2[j]*y1[j];
                                }
                                y2[i]=1/(1+Math.exp(-(s2)));
                                delta_m2[0]=y2[i]*(1-y2[i])*(d[i][0]-y2[i]);
                                for (int j=0;j<10;j++)
                                    {
                                        delta2=0.3*delta_m2[0]*y1[j];
                                        w2[j]+=delta2;
                                    }
                                for (int k=0;k<3;k++)
                                for (int j=0;j<10;j++)
                                    {
                                        //double delta_s=;delta_m2[0]*w2[j]
                                        delta_m1[j]=y1[j]*(1-y1[j])*delta_m2[0]*w2[j];
                                        delta1=0.3*delta_m1[j]*y0[i][k];
                                        w1[k][j]+=delta1;
                                        
                                    }
                                if (Math.abs(y2[i]-d[i][0])<0.05)    
                                {
                                    checkX[i]=true;
                                    System.out.println(i);
                                    }
                                
                            }
                        for(int i=0;i<1;i++)
                            if (checkX[i])checkCnt++;
                        if (checkCnt==1)
                            checkAll=true;
                            
                    }

                }    

заранее спасибо.... 
PM MAIL   Вверх
StandartenFuhrer
Дата 24.3.2008, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 22.10.2006

Репутация: нет
Всего: нет



я уже не могу...либо я чтот недопоимаю, но выход не переваливает за 1  smile 
PM MAIL   Вверх
Rickert
Дата 25.3.2008, 06:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 6
Всего: 52



Отложи нафиг, выпей чайку, вздремни, расслабься и вернись спокойный и уравновешенный.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
dereyly
Дата 25.3.2008, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 16.6.2006

Репутация: 2
Всего: 4



Ну вроде похоже на правду ток коэффициент 0.3 эт как-то дофига бери в интервале от 0.01 до 0.1 можешь впринципе адаптивным шаг сделать
PM MAIL   Вверх
StandartenFuhrer
Дата 25.3.2008, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 22.10.2006

Репутация: нет
Всего: нет



Цитата(Rickert @ 25.3.2008,  06:58)
Отложи нафиг, выпей чайку, вздремни, расслабься и вернись спокойный и уравновешенный.

да я ж его мучаю не один вечер...просто "по теории" алгоритм вроде нормально реализован...а на практике: выход сети не перешагивает за 1. при чем я нашел схожий алгоритм токо сеть попроще...попытался обучить x1+x2 и все равно выход<0....

Добавлено @ 22:07
Цитата(dereyly @ 25.3.2008,  19:30)
Ну вроде похоже на правду ток коэффициент 0.3 эт как-то дофига бери в интервале от 0.01 до 0.1 можешь впринципе адаптивным шаг сделать

та от нетерпения что б выход быстрее увиличивался...но всё равно спасибо...
но все таки что не так,почему выход "мелкий"

Это сообщение отредактировал(а) StandartenFuhrer - 26.3.2008, 23:21
PM MAIL   Вверх
StandartenFuhrer
Дата 31.3.2008, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 22.10.2006

Репутация: нет
Всего: нет



эх вы....мужики...при использовании сигмоида, а именно ф-лы
 
Код

 y=1/(1+Math.exp(s)) //0<=у<1 

Решение то было простое....выходной вектор "промасштабировать"...т.е. что б выход "не перешагивал"  1 ;)))

Это сообщение отредактировал(а) StandartenFuhrer - 31.3.2008, 00:22
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.

  • Литературу, связанную с программированием графики, обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы связанные с программированием графики и мультимедии на языках С++ и Delphi
  • Вопросы по реализации алгоритмов рассматриваются здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема »


 




[ Время генерации скрипта: 0.1130 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.