clear all close all; %Procedura BP, Matlab 2019b i wyższe x=-1:0.1:1;%Zadanie wektora wejściowego do SN %Wartości zadanej funkcji y(x) y=[-.96 -.577 -.073 .377 .641 .66 .461 .134 -.201 -.434 -.5 -.393 -.165... .099 .307 .396 .345 .182 -.031 -.219 -.32]; %Inicjalizacja SN z sigmoidlanymi bipolarnymi funkcjami aktywacji neuronów %(tansig) w warstwie ukrytej l_neur =5; siec_neur = feedforwardnet(l_neur); % utworzenie sieci w pętli otwartej siec_neur = init(siec_neur); % inicjalizacja sieci (zerowanie wag) %siec_neur.inputs{1}.processFcns{1} = 'mapminmax'; % wprowadzenie ograniczeń wektora wejściowego [-1 1] % domyślnie polecenie feedforwardnet wprowadza powyższe ograniczenia siec_neur.layers{1}.transferFcn = 'radbas'; % funkcja aktywacji pierwszej warstwy siec_neur.layers{2}.transferFcn = 'purelin'; % funkcja aktywacji drugiej warstwy %purelin - funkcja aktywacji liniowa, tansig - sigmoidlana %bipolarna funkcja aktywacji, logsig - sigmoidlana unipolarna funkcja %aktywacji, radbas - radialna funkcja aktywacji siec_neur.trainFcn = 'traingdm' % technika uczenia sieci przy użyciu funkcji train %learngd - metoda gradientowa + momentum siec_neur.adaptFcn = 'learngd' % technika uczenia sieci przy użyciu funkcji sim % learngd - metoda gradientowa siec_neur.divideFcn = 'dividetrain'; % metoda przypisania danych do sieci % dividetrain - wszystkie wartości (przypisanie nielosowe) siec_neur.performFcn = 'sse' %miara jakości aproksymacji % sse - suma kwadratów błędów siec_neur.layers{1}.size = l_neur;% przypisanie liczby neuronów w pierwszej warstwie siec_neur = configure(siec_neur,x,y); % automatyczna kofiguracja neuronów, wejść i wyjść do sieci %view(siec_neur) %Obliczanie wartości wyjścia dla zainicjalizowanej sieci NN_out1=sim(siec_neur,x); siec_neur.trainParam.epochs = 2000; %Liczba epok procesu uczenia siec_neur.trainParam.show = 100; %Wyświetlanie błędu co … epok siec_neur.trainParam.goal = 0.03; %Zadany minimalny błąd odwzorowania siec_neur.trainParam.min_grad = 1e-10; siec_neur.trainParam.mc = 0.7; % współczynnik uczenia momentum %siec_neur.trainParam.max_fail = 10000; siec_neur.trainParam.lr = 0.05; %Zadania wart. współczynnika wzmocnienia uczenia [siec_neur, tr,trainParam,time] = train(siec_neur,x,y); %Procedura uczenia wag SN eep=tr.epoch;%tablica epok wagi1=siec_neur.IW{1} wagi2=siec_neur.LW{2}' bias1=siec_neur.b{1}' bias2=siec_neur.b{2}' NN_out2=sim(siec_neur,x);%Obliczanie wartości wyjścia z wyuczonej SN idf=figure('color','w'); subplot(2,1,1) plot(x,y,'o',x,NN_out1,'-') %Wizualizacja wyniku poczatkowego grid on subplot(2,1,2) plot(x,y,'o',x,NN_out2,'-') %Wizualizacja wyniku% grid on showx=siec_neur.trainParam