Home > Bioinformatik, Scripts > Neuronale Netze und Matlab

Neuronale Netze und Matlab

In meinem Bio-Seminar, wo ein neuronales Netz entwickelt werden sollte, hab ich mich intensiv mit der Neural Network Toolbox in Matlab beschäftigt. Dieser Teil der Matlab Bioinformatic Tools ermöglicht einem relativ schnell und einfach ein neuronales Netz zur Mustererkennung zu entwickeln. Auf den ersten Blick scheint es zwar ein wenig verwirrend, aber hat man sich erstmal eingearbeitet sind Modifikationen an Neuronalen Netz, Netztyp, Trainingsparameter etc. relativ leicht zu bewerkstelligen.

Man braucht zunächst eine Matrix mit Trainingsmustern. Ein einzelnes Muster besteht aus einem Vektor, die Vektoren zusammen ergeben dann die Muster-Matrix. Zu jedem Muster gehört zusätzlich eine Klassifizierung, bei binären Problemen (“Ist vom Muster vom A oder B?”) ist dies im Allgemeinen 1 oder 0. Somit hat man als Zielmatrix einen transponierten Vektor, für jedes Muster ein Klassifizierungswert 1 oder 0. Eine neue Instanz eine neuronalen Netzes erhält man durch:

net = newff(MusterMatrix,ZielMatrix, [10 2], {'logsig','logsig'},'trainrp','learngdm','mse');

Die ersten beiden Parameter geben somit die Muster und ihre Klassifizierung an. Man kann hierfür auch zusätzlich die Testdaten nehmen, die Muster werden in diesem Schritt nur benötigt, um die Größe der Eingabeschicht zu ermitteln, Werte zu normalisieren und eventuell die Koordinate, für die Werte in jedem Muster gleich ist, zu ignorieren (in diesem Fall wird keine Verbindung zur verdeckten Schicht erstellt).
Der dritte Paramter ist ein Zeilenvektor, in diesem Beispiel (10 2). dieser spezifiziert die Anzahl der verdeckten Schichten. Eingabeschicht und Ausgabeschicht werden wie bereits erwähnt automatisch anhand der Muster und der Sollklassifizierung ermittelt. Mit (10, 2) würde man zum Beispiel 2 verdeckte Schichten mit 10 bzw. 2 Neuronen erstellen.
Der nächste Parmater ist ein Cellarray und spezifiziert die zu nutzende Aktivierungsfunktion für jedes Netz. Die logistische Funktion (logsig) ist meist die Regel bei neuroanlen Netzen.
Dann folgenden noch 3 Strings, die Trainingsfunktion, die Lernfunktion und die Fehlerfunktion, am gebräuchlichsten ist wohl der mittlere quadratische Fehler (mse). Als Trainingsfunktion bevorzuge ich persönliche Resilient Backpropagation (trainrp), sie bezieht die Historie des Fehlergradienten mit ein und ist in der Regel performanter als Standard-Backpropagation. Standardmäßig ist die Trainingsfunktion in der Toolbox jedoch Levenberg-Marquardt Backpropagation (trainlm).
Damit hat man ein Netz erstellt, dass nun trainiert werden soll, dazu benutzt man ganz einfach train:

net = train(net,MusterMatrix,ZielMatrix);

Dabei sollte man natürlich nur Trainingsdaten nehmen. Es öffnet sich ein Fenster, dass Fortschritt und Performanz in jeder Iteration anzeigt. Anschließend kann man das Netz testen, oder für einzelne Muster auswerten:

out = sim(net, TestDaten);

out enthält anschließend vorhergesagte Werte.
Vor dem Training kann man auch noch einige Anpassungen vornehmen, z.B.

net.trainParam.showWindow = 0; % Gui nicht anzeigen, hilfreich bei automatischen tests
net.trainParam.lr = 0.1;              % Lernarte ändern
net.trainParam.epochs = 100;      % Anzahl der Trainigsdurchläufe
net.trainParam.goal = 1e-3;         % Abbruchbedingung bezüglich Fehler

Auch für das Netz kann man zahlreiche Änderungen vornehmen, wenn man zum Beispiel nicht will, dass gleiche Werte in den Mustern ignoriert werden und trotzdem Verbindungen zur verdeckten Schicht erstellt werden, kann mal folgendes machen:

ipf = {};
tpf = {};
ddf = 'dividerand';
net = newff(MusterMatrix,ZielMatrix, [10 2], {'logsig','logsig'},'trainrp','learngdm','mse',ipf,tpf,ddf);

Zur Bestimmung der Qualität erstellter Netze gibt es noch einige weitere Tools, Stichwort rocplot.
Kleiner Wehrmutstropfen ist, dass die Neural Network Toolbox manchmal sehr knapp dokumentiert ist, vor allem wenn es um kleine Parameter geht. Auch google hilft einem nicht immer weiter. Oft hilft nur probieren und mal in den Quellcode schauen.
Nichts desto trotz ist es eine mächtige Toolbox, man kann viele Netzarten und -architekturen realisieren, wie z.B. Input-Time-Deay-Netze, Elman-Netze, rekurrente Netze. Und dabei kann man vieles selber nach eigenen Bedürfnissen anpassen, ohne dass man eine komplett neue Software schreiben muss.

Ähnliche Beiträge:


Beschriftete Balkendiagramme in Matlab
Zeilenumbruch in Tooltips – Matlab GUI
Flexible & erweiterte Progressbar in Matlab mit Event-Listener

  1. Bisher keine Kommentare
  1. Bisher keine Trackbacks
*