Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование игр, графики и искусственного интеллекта > Визуализация карт Коханена


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

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

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

Автор: StandartenFuhrer 3.4.2008, 00:09
интересно..тогда встречный вопрос... к каждому нейрону у меня 3 входа...соответственно каждый вес изменяеться?
и по поводу визуализации, я просто опредялял "растояние" между нейронами, как вектора с координатами задаными весами...оно?

Автор: dereyly 3.4.2008, 01:18
Визуализация это 2х мерная сетка в 3х мерном пространстве -- mesh
а нсчет ближайших надо посмотреть.... мне казалось что ближайшие по сетке а не по растоянию...

Автор: StandartenFuhrer 3.4.2008, 23:32
спасибо... загнали ;))))
Давайте пример и обучения и визуализации...бу благодарен... паскаль или ява если можно.....а то я понял что я неправильно понял алгоритм....;)))
вот мое "творение" (обучение)
карта 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]);
        }
    }


Автор: Ferroman 13.5.2008, 14:12
Библиотека компонентов для Delphi, реализующая самоорганизующиеся карты Кохонена
Взял http://www.basegroup.ru/download/freecomponents/sombase/.
Пользовал более раннюю версию, - работала нормально.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)