Quantcast
Channel: Forum Pasja Informatyki - Najnowsze pytania bez odpowiedzi
Viewing all articles
Browse latest Browse all 21942

reguła delta, pojedynczy neuron

$
0
0

no cześć, potrzebuje napisać program wykorzystujący regułę delta, muszę podać kilka wejść, oczekiwane wyjście, współczynnik = 0.5, wagi sobie wylosować, po przejściu zadanej liczby epok treningowych wagi powinny się tak zmienić, żeby wyjście neuronu było jak najbliższe wyjściu oczekiwanemu, chyba rozumiem regułę itd natomiast nie za bardzo wiem jak to napisać, znalazłam w Internecie kilka kodów ale wszędzie ten problem jest bardziej rozbudowany przez co gubię się przy analizie i mam jeszcze większy mętlik, może ktoś podpowie jak się za to zabrać? póki co zadeklarowałam sobie zmienne i próbowałam coś zaobserwować w prostych pętlach, ale coś robię kompletnie źle bo wagi po przepuszczeniu np 500 razy idą zupełnie w złą stronę

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cmath>

using namespace std;

int main()
{
    double y=0; // wyjscie rzeczywiste neuronu
    int z = 5; // wyjscie oczekiwane neuronu
    double n = 0.5; // wspolczynnik
    int epoka = 500; // liczba epok treningowych
    double waga[5];
    double delta; // roznica z-y czyli wyjscie oczekiwane a rzeczywiste
    double wzorzec1[5]={1.2,0.2,1.4,0.5,0.3};

//LOSOWANIE WAG
    for(int i=0; i<5; i++)
    {
        waga[i]=((rand()%5)+0.5);
     //   cout << "waga nr "<< i << "wynosi: "<< waga[i] << endl;
    }

//OBLICZANIE WYJSCIA Y

            for(int i=0; i<5; i++)
        {
            y+= waga[i]* wzorzec1[i];

        }
cout << "y1 wynosi:"<< y << endl;



// OBLICZANIE RӯNICY Z-Y

             delta =(z-y);
cout << "delta wynosi: "<< delta << endl;

//USTALENIE NOWEJ WAGI

for (int j=0; j<epoka; j++){
             for(int i=0; i<5; i++)
        {
            waga[i] = (waga[i] + (n*delta*wzorzec1[i]));
          cout << "nowa waga "<<i<<" wynosi "<< waga[i] << endl;


        }
}

    // KONCOWY Y KTÓRY POWINIEN BYĆ BLISKI WARTOŚCI Z
   for(int i=0; i<5; i++)
        {
            y+= waga[i]* wzorzec1[i];

        }
cout << "y1 wynosi:"<< y << endl;

    return 0;
}

 


Viewing all articles
Browse latest Browse all 21942