Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Exemplo de Implementação em C
- // dados de entrada
- float x1[12] = {-3,-2, 1,-2,-2, 0, 1,-1,-2.5,-2.0, 0,-3.5};
- float x2[12] = { 1,-2, 1, 2,-2, 2, 2,-3, 1.5,-2.5, 1, 2.0};
- // estado inicial dos vetores de peso
- float w1[4] = { 0, 1, 0,-1};
- float w2[4] = { 1, 0,-1, 0};
- // espaco de saida
- float S1[4] = { 0, 1, 1, 0};
- float S2[4] = { 1, 1, 0, 0};
- int iX = 0; // entrada atual
- int iter = 1; // iteracao atual
- int fConv = 90; // delimita iteracao da fase de convergencia
- int nD = 12; // numero de dados
- // encontra o neurônio vencedor pelo calculo da menor distancia
- // wV = neuronio vencedor
- wV = 0; // indice do neuronio vencedor
- float dist[4] = { 0, 0, 0, 0 }; // vetor de distancias
- for (int j=0; j<nN; j++)
- {
- // calcula distancia euclidiana
- dist[j]= sqrt( (pow(x1[at]-w1[j],2)) + (pow(x2[at]-w2[j],2)) );
- // verifica a menor distancia
- if (dist[j] <= dist[wV])
- wV = j;
- }
- // verifica entre todos os neuronios,
- // quais estao na regiao de vizinhanca ( wV = neuronio vencedor )
- for (int j=0; j<nN; j++)
- {
- // verifica se esta na regiao de vizinhanca
- // note que o calculo e feito no espaco de saida (S)
- distviz = sqrt( (pow(S1[wV]-S1[j],2)) + (pow(S2[wV]-S2[j],2)) );
- // se estiver dentro do raio (funcao de vizinhanca circular),
- // atualiza o vetor de peso
- if (distviz <= raio)
- {
- w1[j] = w1[j]+alpha*(x1[act]-w1[j]);
- w2[j] = w2[j]+alpha*(x2[act]-w2[j]);
- }
- }
- // escolhe nova entrada aleatoria entre 0 e nD (entre os dados)
- act = (int)(nD * rand() / (RAND_MAX + 1.0));
- iter++; // incrementa iteraçao
- if (iter == fConv) // quando entra na fase de Convergencia
- { alpha = 0.25; // atualiza parametros
- raio = 0.5;
- }
- // a cada duas iteracoes decrementa taxa de aprendizagem
- if (iter % 2 == 0)
- {
- if (iter < fConv) // decremento na fase de Ordenacao
- alpha-= 0.01;
- if (iter >= fConv) // decremento na fase de Convergencia
- alpha-= 0.001;
- if (alpha <=0) // protecao para alpha <= 0
- alpha-= 0.0005;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement