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