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;
}