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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Визуализация карт Коханена, Алгоритм "раскраски" 
:(
    Опции темы
StandartenFuhrer
Дата 31.3.2008, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Алгоритм обучения карты Кохонена ясен и прост....
Но вот раскраска не оч. понятна:опишите алгоритм раскраски. в инете несколько вариантов, но учитываю что я ток начал изучать нейросети тяжеловато представляеться что с чем сравнивать, + сравнивание весов производиться или уже "выхода" сети(в зависимости от входного вектора)
или же при каждом шаге определения нейрона "лидера" увиличивать зарисовку области
или же я просматриваю растояние от каждого нейрона его соседям, строю матрицу из этих значений и имея заранее известное к-во класетров выбираю "лидеров" и от них дальше отталкиваюсь рисую карту?

Не стесняемся...поправляем меня... ;)))

Это сообщение отредактировал(а) StandartenFuhrer - 31.3.2008, 17:06
PM MAIL   Вверх
dereyly
Дата 1.4.2008, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



не совсем понятен вопрос... 
если вас интересует сдвиг соседей нейрона победителя, то он вычисляется для ближайших нейронов в Матрице карты кохонена, если вы пользуетесь 2х мерным представлением, хотя я тоже могу заблуждаться...
А визуализируют обычно  координаты нейронов, т.е. если на вход сети поступает 2х мерный сигнал то соответствующие веса в нейронах карты кохонена можно смитать координатами

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


Шустрый
*


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

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



интересно..тогда встречный вопрос... к каждому нейрону у меня 3 входа...соответственно каждый вес изменяеться?
и по поводу визуализации, я просто опредялял "растояние" между нейронами, как вектора с координатами задаными весами...оно?
PM MAIL   Вверх
dereyly
Дата 3.4.2008, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Визуализация это 2х мерная сетка в 3х мерном пространстве -- mesh
а нсчет ближайших надо посмотреть.... мне казалось что ближайшие по сетке а не по растоянию...
PM MAIL   Вверх
StandartenFuhrer
Дата 3.4.2008, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



спасибо... загнали ;))))
Давайте пример и обучения и визуализации...бу благодарен... паскаль или ява если можно.....а то я понял что я неправильно понял алгоритм....;)))
вот мое "творение" (обучение)
карта 10*10 нейронов... 3 входа...
Код

    double[][] W=new double[3][100];
    double[][] d=new double[10][10];

    void initWeights(){
        for(int i=0;i<3;i++)
            for(int j=0;j<100;j++)
                W[i][j]=0.3*Math.random();
    }

    void findMatrixD(int ind){
        for (int i=0;i<10;i++)
            for (int j=0;j<10;j++)
            {
                for (int k=0;k<100;k++)
                                  d[i][j]+=Math.pow((x[ind][0]-W[0][k]), 2)+Math.pow((x[ind][1]-W[1][k]), 2)+Math.pow((x[ind][2]-W[2][k]), 2);
            }
    }
             void findMinD(){
        double min=d[0][0];
        for (int i=0;i<10;i++)
            for (int j=0;j<10;j++)
            {
                if(d[i][j]<min)
                {
                    min=d[i][j];
                    indMinX=i;
                    indMinY=j;
                }
            }
    }
//обучение соседей
    void deltaW(){
        int indx,indy;
        int randX=(int) Math.round(Math.random()*19);
        double temp=nju();
        /**
         * _|
         */
        indx=indMinX-1;
        indy=indMinY-1;
        if ((indx>0)&&(indx<9)&&(indy>0)&&(indy<9))
        {
            W[0][indx*10+indy+1]+=temp*(x[randX][0]-W[0][indx*10+indy+1]);
            W[1][indx*10+indy+1]+=temp*(x[randX][1]-W[1][indx*10+indy+1]);
            W[2][indx*10+indy+1]+=temp*(x[randX][2]-W[2][indx*10+indy+1]);
        }
        indx=indMinX;
        indy=indMinY-1;
        if ((indx>0)&&(indx<9)&&(indy>0)&&(indy<9))
        {
            W[0][indx*10+indy+1]+=temp*(x[randX][0]-W[0][indx*10+indy+1]);
            W[1][indx*10+indy+1]+=temp*(x[randX][1]-W[1][indx*10+indy+1]);
            W[2][indx*10+indy+1]+=temp*(x[randX][2]-W[2][indx*10+indy+1]);
        }
        
        indx=indMinX+1;
        indy=indMinY-1;
        if ((indx>0)&&(indx<9)&&(indy>0)&&(indy<9))
        {
            W[0][indx*10+indy+1]+=temp*(x[randX][0]-W[0][indx*10+indy+1]);
            W[1][indx*10+indy+1]+=temp*(x[randX][1]-W[1][indx*10+indy+1]);
            W[2][indx*10+indy+1]+=temp*(x[randX][2]-W[2][indx*10+indy+1]);
        }
        
        indx=indMinX+1;
        indy=indMinY;
        if ((indx>0)&&(indx<9)&&(indy>0)&&(indy<9))
        {
            W[0][indx*10+indy+1]+=temp*(x[randX][0]-W[0][indx*10+indy+1]);
            W[1][indx*10+indy+1]+=temp*(x[randX][1]-W[1][indx*10+indy+1]);
            W[2][indx*10+indy+1]+=temp*(x[randX][2]-W[2][indx*10+indy+1]);
        }
        indx=indMinX+1;
        indy=indMinY+1;
        if ((indx>0)&&(indx<9)&&(indy>0)&&(indy<9))
        {
            W[0][indx*10+indy+1]+=temp*(x[randX][0]-W[0][indx*10+indy+1]);
            W[1][indx*10+indy+1]+=temp*(x[randX][1]-W[1][indx*10+indy+1]);
            W[2][indx*10+indy+1]+=temp*(x[randX][2]-W[2][indx*10+indy+1]);
        }
        indx=indMinX;
        indy=indMinY+1;
        if ((indx>0)&&(indx<9)&&(indy>0)&&(indy<9))
        {
            W[0][indx*10+indy+1]+=temp*(x[randX][0]-W[0][indx*10+indy+1]);
            W[1][indx*10+indy+1]+=temp*(x[randX][1]-W[1][indx*10+indy+1]);
            W[2][indx*10+indy+1]+=temp*(x[randX][2]-W[2][indx*10+indy+1]);
        }
        indx=indMinX-1;
        indy=indMinY+1;
        if ((indx>0)&&(indx<9)&&(indy>0)&&(indy<9))
        {
            W[0][indx*10+indy+1]+=temp*(x[randX][0]-W[0][indx*10+indy+1]);
            W[1][indx*10+indy+1]+=temp*(x[randX][1]-W[1][indx*10+indy+1]);
            W[2][indx*10+indy+1]+=temp*(x[randX][2]-W[2][indx*10+indy+1]);
        }
        indx=indMinX-1;
        indy=indMinY;
        if ((indx>0)&&(indx<9)&&(indy>0)&&(indy<9))
        {
            W[0][indx*10+indy+1]+=temp*(x[randX][0]-W[0][indx*10+indy+1]);
            W[1][indx*10+indy+1]+=temp*(x[randX][1]-W[1][indx*10+indy+1]);
            W[2][indx*10+indy+1]+=temp*(x[randX][2]-W[2][indx*10+indy+1]);
        }
    }



Это сообщение отредактировал(а) StandartenFuhrer - 4.4.2008, 17:00
PM MAIL   Вверх
Ferroman
Дата 13.5.2008, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Библиотека компонентов для Delphi, реализующая самоорганизующиеся карты Кохонена
Взял отсюда.
Пользовал более раннюю версию, - работала нормально.

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  SOMBase.zip 460,50 Kb
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

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

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

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

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


 




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


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

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