Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   
Bücher:

Fachkräfte:
weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Funktion linear approximieren mit Neuronalem Netz

 

MaikPloitz

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.09.2019, 12:30     Titel: Funktion linear approximieren mit Neuronalem Netz
  Antworten mit Zitat      
Hallo zusammen,

ich habe einen Code gefunden, welcher in Python eine Funktion mittels eines neuronalen Netzes approximiert. Dies würde ich aufgrund fehlender Pythonkentnisse gern in Matlab durchführen, kann mir hier jemand weiterhelfen, wie eine solche Funktion in Matlab auszusehen hat?

Zielstellung: Es gibt eine Funktion f(x), welche dem Netzwerk nicht bekannt ist. Es soll ein neuronales Netzwerk g(x) aufgesetzt und angelernt werden, welches diese Funktion approximiert.

Umsetzung in Python:
Code:

% Import Keras and Numpy Stuff we need
from keras.models import Sequential
from keras.layers.core import Dense, Activation
from keras.optimizers import Adadelta
import numpy as np
 
f = lambda x: 0.2+0.4*x**2+0.3*x*np.sin(15*x)+0.05*np.cos(50*x)
x = np.linspace(0, 1, 101)
y = f(x)
X = x.reshape((-1, 1))
print(np.shape(X)) % (100, 1)
print(np.shape(y)) % (100, )

model = Sequential() % Sequentielles Netz, d.h. Layer nach Layer...
model.add(Dense(input_dim=1, output_dim=300, init="uniform"))
model.add(Activation("relu"))
model.add(Dense(output_dim=1, init="uniform"))
 


Was haben wir jetzt aufgesetzt? Ein Dense Layer ist ein Fully Connected Layer, d.h. jedes Neuron soll mit jedem des nächsten verbunden werden. Input hat die Dimension 1. Unser Inputvektor x hat die Form [100, 1]. Wie bereits beschrieben, bedeutet die Länge 100, dass wir 100 Werte haben, welche aber die Dimension 1 haben. Die Output Dimension wurde mit 300 initialisiert, das bedeutet, dass das Netzwerk 300 Neuronen bekommt im 1. Layer. Die Initialisierung soll ‘uniform’, d.h. gleichverteilt erfolgen.

Als Aktivierungsfunktion wird die ReLu Funktion hinzugefügt.

Anschließend, als Output-Layer wieder ein Fully-Connected Layer mit einer Output Dimension, d.h. das Netzwerk soll keine Klassifizierung o.ä. machen, sondern eine reale Zahl ausgeben. Diese müssen wir nun irgendwie mit dem Sollwert, d.h. der Funktion f(x) vergleichen und dem Netzwerk eine Loss-Funktion mitteilen.
Code:

model.compile(loss='mean_squared_error', optimizer=Adadelta())
 

In Keras wird das aufgesetzte Modell mit Loss Funktion (in dem Fall der mittlere quadratische Fehler) und Optimizer (in dem Fall Adadelta) gleich kompiliert, d.h. wenn möglich als optimierter GPU Code im Hintergrund erzeugt. Nun ist alles aufgesetzt und in Code gegossen. Nun kann man es lernen lassen.
Code:

model.fit(X, y, batch_size=15, nb_epoch=10000)
 

Das Lernen erfolgt mit jeweils 15 der 100 Werte aus dem Eingangsvektor x. Die Fehlerfunktion wird 10.000x die gemachten mittleren quadratischen Fehler via Backpropagation auf die Gewichte w und b zurück verteilen. Je nach Initialisierung und Loss Funktion und Aktivierungsfunktion und gewählter Hyperparameter, lernt das Netzwerk schneller oder langsamer.

---------
Bisher habe ich leider nur folgenden Ansatz gefunden:
Code:

layer = fullyConnectedLayer(outputSize,'Name','Test')
 


Vielleicht könnt ihr mir da weiterhelfen, wie man diesen Ansatz in Matlab einfach und effizient umsetzt. Einen Aufruf von Python aus Matlab aus, würde ich aufgrund fehlender Pythonkentnisse gern vermeiden wollen.

Grüße und Dank


MaikPloitz

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.09.2019, 19:42     Titel:
  Antworten mit Zitat      
Keiner eine Idee oder einen Ansatz?
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2020 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.