Dynamisches System mit NN
Dynamisches System mit Neuronalen Netz
Entwicklung eines Neuronalen Netzes, welches das Verhalten eines dynamischen Systems abbildet.
Einführung in die Neuronalen Netze
Während Probleme, die durch einen Algorithmus in kurzer Zeit exakt zu lösen sind, von einem Computer deutlich schneller gelöst werden können als von einem Menschen, benötigt das menschliche Gehirn für Aufgaben wie das Erkennen eines Gesichts wesentlich weniger Zeit. Außerdem erreicht der Computer nicht die hohe Erkennungsleistung. Ein weiterer Vorteil des menschlichen Gehirns ist, dass auch dann noch korrekte Ergebnisse geliefert werden, wenn es zu einem Ausfall einiger für die Problemlösung notwendiger Nervenzellen kommt. Selbst wenn die "Eingaben" ungenau sind, also beispielsweise ein Text durch Verschmutzung unleserlich geworden ist, kann das Gehirn den Text noch erkennen. Ein Computer liefert in diesen Fällen fehlerhafte bzw. unbrauchbare Ergebnisse. Die Idee ist daher, die Arbeitsweise des Gehirns auf Maschinen zu übertragen.
Künstliche neuronale Netze bestehen, wie das Gehirn von Säugetieren, aus einer großen Anzahl kleiner Elemente, den Neuronen. Die Information wird verarbeitet, indem sich die Neuronen mit Hilfe von gerichteten Verbindungen untereinander aktivieren. Dies geschieht im Prinzip analog zu den Vorgängen im Gehirn.
Neuronale Netze zeichnen sich durch ihre Lernfähigkeit aus. Sie können eine Aufgabe anhand von Trainingsbeispielen erlernen, ohne dazu explizit programmiert werden zu müssen. Weitere Vorteile sind die hohe Parallelität bei der Informationsverarbeitung, die hohe Fehlertoleranz und die verteilte Wissensrepräsentation, wodurch ein zerstörtes Neuron nur einen relativ kleinen Wissensausfall bedeutet.
Ein NN besteht aus einem Neuronen- und einem Gewichtungs-Block. Das Verhalten des Netzwerkes hängt stark von der Interaktion zwischen diesen Blöcken ab.
Es gibt drei verschiedene Neuronenschichten:
- Eingabeschicht
- Versteckte Schicht
- Ausgabeschichten.
Erstellen eines NN für eine frei wählbare Funktion y = f(x)
Wir erstellen ein künstliches Neuronales Netz (ANN) für 3 verschiede Funktionen:
| Funktion | Kennlinie |
| check variable Randbedingung: check variable Schrittweite: 0,01 |
![]() |
| check variable Randbedingung: check variable Schrittweite: 0,05 |
![]() |
| check variable Randbedingung: check variable Schrittweite: 0,05 |
![]() |
Download
Kommentar
% Ausarbeitung zu Neuronale Netzwerke in Matlab 7.1
% Vorlesung: Softcomputing
% Copyright 2007 Thomas Ludwig
% This file is distributed under the terms of the GNU General Public License,
% see http://www.gnu.org/copyleft/gpl.txt
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Funktion NNnew()
% Optionen - Allgemein
filename_U= 'werte_U.SIM'; % Dateiname für die Werte U
filename_Y= 'werte_Y.SIM'; % Dateiname für die Werte Y
filename_g= 'werte_g.SIM'; % Dateiname für die Werte des Generator
epochen= 4; % Maximale Anzahl an Durchläufen, die trainiert werden soll
layers= [4 1]; % 1xN-Vektor mit Anzahl der Neuronen in jedem der N Layer
transf= {'tansig' 'purelin'}; % Transfer Funktionen der Ebenen (tansig, logsig, purelin)
% Optionen - Messreihe einschränken
lt = 500; % length of the training record
lv = 200; % length of the validation record
na = 2; % Number of past outputs to use in regression vector.
nb = 2; % Number of past inputs to use in regression vector.
% Programmablauf
data.INIT= 0; % data Objekt initialisieren, rein formal
data= loadme(filename_U, 'U', data); % Datensaetze U laden
data= loadme(filename_Y, 'Y', data); % Datensaetze Y laden
data= loadme(filename_g, 'g', data); % Datensatz des Generators
% Benutzer Optionen auf Matrix Dimension pruefen
if (length(data.YP) < lt), lt= length(data.YP); end
if (length(data.UP) < lv), lv= length(data.UP); end
% Offsets setzen
offset = max(na,nb)+1
t_phit=offset:lt;
t_phiv=offset:lv;
% Messreihenlaenge festlegen
data.YP= data.YP(1:lt);
data.YT= data.YT(1:lt);
data.UP= data.UP(1:lt);
data.UT= data.UT(1:lt);
data.gP= data.gP(1:lt);
data.gT= data.gT(1:lt);
data.tt = [offset:lt]';
data.tv = [offset:lv]';
% 2 Methoden fuer das Modell - generelles und inverses
% Formel: Yk + a1*Y(k-1) + a2*Y(k-2)= b1*U(k-1) + b2*U(k-2)
% Model Generieren
% ^y(t)= g1[y(t-1), y(t-2), u(t-1), u(t-2)]
%
% Inverses Model generieren - Nennt sich: Inverses lernen
% u(t)= g2[ Y(t+1) y(t) y(t-1) u(t-1)];
% Generelles Model
%
% Matrix fuer Training generieren und transponieren
phit = ( [ data.YT(t_phit-1) data.YT(t_phit-2) data.UT(t_phit-1) data.UT(t_phit-2)] )';
% Matrix fuer Model generieren und transponieren
phiv = ( [ data.YP(t_phiv-1) data.YP(t_phiv-2) data.UP(t_phiv-1) data.UP(t_phiv-2)] )';
% Create the training and validation output vectors including the offset
data.yto = ( data.YT(offset:lt) )';
data.yvo = ( data.YP(offset:lv) )';
% NN erstellen und simulieren
net = newff(minmax(phit),layers,transf,'trainlm');
data.oY = sim(net,phit); % Simulieren des nicht trainierten Netzwerks
% NN trainieren
net.trainParam.epochs = epochen; % Durchlaeufe
net.trainParam.show = 10; % Display
net = train(net,phit,data.yto); % Trainieren
data.mY = sim(net,phit); % Simulieren des trainierten Netzwerks
% Das Model Validieren
data.yhatv = sim(net,phiv);
graphic(data); % Grafik Plotten
end
Funktion graphic(data)
function graphic(data);
close all;
figure('Name','Simulations Plot Fenster für Datensätze','NumberTitle','off');
subplot(2,1,1); % Orginal - Eingelesener Datensatz
plot(data.UP,data.UT,'r', data.YP,data.YT,'g', data.gP,data.gT,'bl');
legend('u', 'y', 'Generator'), title('Boris Zeitverlauf');
xlabel('t'), ylabel('y, u, g'), grid on;
subplot(2,1,2); % Modelling data
plot(data.tt,data.yto,'r', data.tt,data.oY,'y', data.tt,data.mY,'g');
legend('NN Trainiert', 'Neuronales Netzwerk nicht trainert', 'y');
title('Modelling data'), xlabel('Laenge der Messreihe'), grid on;
Funktion loadme(filename, version, data)
% Datei von Boris oeffnen und Datensaetze laden
function data= loadme(filename, version, data);
% Datei einlesen und ohne Kommentare laden
fid_read= fopen(filename, 'r'); % Werte Datei öffnen
while ~feof(fid_read);
if (fgetl(fid_read) ~= '!');
file_value = textscan(fid_read, '%s %s', 'delimiter');
end;
end
fclose(fid_read);
% U
if (version == 'U');
% Bloecke zuweisen
data.UP= str2double(file_value{1});
data.UT= str2double(file_value{2});
end
% Y
if (version == 'Y');
% Bloecke zuweisen
data.YP= str2double(file_value{1});
data.YT= str2double(file_value{2});
end
% g
if (version == 'g');
% Bloecke zuweisen
data.gP= str2double(file_value{1});
data.gT= str2double(file_value{2});
end
Kommentar schreiben
- Benötigte Felder sind mit einem Stern (*) markiert.








