Erstellt am: 16.04.2008 | Editiert am: 24.04.2008

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
Ihr Browser kann das Objekt leider nicht anzeigen!check variable
Randbedingung: Ihr Browser kann das Objekt leider nicht anzeigen!check variable
Schrittweite: 0,01
formel1
Ihr Browser kann das Objekt leider nicht anzeigen!check variable
Randbedingung: Ihr Browser kann das Objekt leider nicht anzeigen!check variable
Schrittweite: 0,05
formel2
Ihr Browser kann das Objekt leider nicht anzeigen!check variable
Randbedingung: Ihr Browser kann das Objekt leider nicht anzeigen!check variable
Schrittweite: 0,05
formel3

 

 

  1. Einführung in die Neuronalen Netze
  2. Erstellen eines NN für eine frei wählbare Funktion y = f(x)
  3. Download
  4. Kommentar
  5. Funktion NNnew()
  6. Funktion graphic(data)
  7. Funktion loadme(filename, version, data)
  8. Kommentar schreiben
  9. Weitere Themen
    1. MathML Formel3 Randwert
    2. MathML Formel3
    3. MathML Formel1 Randwert
    4. MathML Formel2 Randwert
    5. MathML Formel2
    6. MathML Formel1

 

 

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()

function data= 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
    % Feed-Forward backpropagation Netzwerk
    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)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Plotten der Datensätze
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.
Sollte der Sicherheitscode unleserlich sein, kann durch einen Klick auf das Bild ein neuer Sicherheitscode erzeugt werden.

Sicherheitscode:
 

Database: 0,0082 s, 22 Anfragen, PHP: 0,1569 s, total: 0,1651 s