Dieser Artikel wurde im Rahmen der Data Science Blogathon
In diesem Artikel, Wir werden diese grundlegenden Fragen beantworten und ein grundlegendes neuronales Netzwerk aufbauen, um eine lineare Regression durchzuführen.
Was ist ein neuronales Netz?
Die Grundeinheit des Gehirns wird als Neuron bezeichnet, es gibt ungefähr 86 Milliarden Neuronen in unserem Nervensystem, die mit 10 ^ 14-10 ^ 15 Synapse. michJedes Neuron empfängt ein Signal von den Synapsen und gibt es nach Verarbeitung des Signals aus.. Diese Idee wird aus dem Gehirn extrahiert, um ein neuronales Netzwerk aufzubauen.
Jedes Neuron realisiert ein Skalarprodukt zwischen den Eingaben und den Gewichten, Vorurteile hinzufügen, wendet eine Triggerfunktion an und gibt die Ausgänge aus. Wenn eine große Anzahl von Neuronen zusammen vorhanden sind, um eine große Anzahl von Ausgaben zu ergeben, es entsteht eine neurale Schicht. Schließlich, mehrere Schichten verbinden sich zu einem neuronalen Netz.
Arquitectura de red neuronal
Neuronale Netze entstehen, wenn sich mehrere neuronale Schichten zu einem Netz verbinden, oder wir können sagen, dass es einige Ebenen gibt, deren Ausgaben Eingaben für andere Ebenen sind.
Der gebräuchlichste Schichttyp zum Aufbau eines grundlegenden neuronalen Netzes ist der vollständig verbundene Schicht, in denen benachbarte Schichten vollständig gepaart sind und einschichtige Neuronen nicht miteinander verbunden sind.
In der Abbildung oben, Neuronale Netze werden verwendet, um Datenpunkte in drei Kategorien zu klassifizieren.
Regeln der Namensgebung. Wenn das N-Schichten-Neuralnetzwerk, wir zählen nicht die Eingabeschicht. Deswegen, ein einschichtiges neuronales Netz beschreibt ein Netz ohne versteckte Schichten (Eingang wird direkt auf Ausgang abgebildet). Im Fall unseres Codes, Wir werden ein einschichtiges neuronales Netzwerk verwenden, nämlich, Wir haben keine versteckte Schicht.
Ausgabeschicht. Anders als alle Schichten in einem neuronalen Netz, Neuronen in der Ausgangsschicht haben normalerweise keine Feuerfunktion (oder Sie können denken, dass sie eine lineare Identitätsaktivierungsfunktion haben). Dies liegt daran, dass die letzte Ausgabeschicht normalerweise die Klassenergebnisse darstellt (zum Beispiel, in der Klassifizierung), das sind willkürliche Realwertzahlen oder eine Art Realwertziel (zum Beispiel, im Rückschritt). Da wir die Regression mit einer einzelnen Schicht durchführen, Wir haben keine Aktivierungsfunktion.
Dimensionierung neuronaler Netze. Die beiden Metriken, die Menschen häufig verwenden, um die Größe neuronaler Netze zu messen, sind die Anzahl der Neuronen oder, häufiger, die Anzahl der Parameter.
Bibliotheken
Wir werden drei grundlegende Bibliotheken für dieses Modell verwenden, numpy, matplotlib und TensorFlow.
- Numpy: Dies fügt Unterstützung für große, mehrdimensionale Arrays und Arrays hinzu, zusammen mit einer großen Sammlung von High-Level-Mathematikfunktionen. In unserem Fall, wir werden Daten mit Hilfe von Numpy generieren.
- Matplotlib: Dies ist eine Plotterbibliothek für Python, Wir werden die Endergebnisse mit Grafiken in Matplotlib visualisieren.
- Tensorflow: Diese Bibliothek hat einen besonderen Fokus auf tiefes neuronales Netzwerktraining und Inferenz. Wir können die Layer direkt importieren und trainieren, Testfunktionen, ohne das ganze Programm schreiben zu müssen.
numpy als np importieren import matplotlib.pyplot als plt Tensorflow als tf importieren
Daten generieren
Wir können unsere eigenen numerischen Daten für diesen Prozess mit der Funktion np.unifrom generieren () das erzeugt einheitliche Daten. Hier, wir verwenden zwei Eingabevariablen xs und zs, Hinzufügen von etwas Rauschen, um die Datenpunkte zu randomisieren und, Schließlich, die Zielvariable ist definiert als y = 2 * xs-3 * zs + 5 + Lärm. Die Größe des Datensatzes beträgt 1000.
Beobachtungen=1000 xs=np.random.uniform(-10,10,(Beobachtungen,1)) zs=np.random.uniform(-10,10,(Beobachtungen,1)) created_inputs=np.column_stack((xs,zs)) Rauschen=np.random.uniform(-10,10,(Beobachtungen,1)) generiertes_ziel=2*xs-3*zs+5+Rauschen
Nach dem Generieren der Daten, speichern Sie sie in einer .npz-Datei, damit sie für das Training verwendet werden können.
np. wissen('TF_intro',input=generierte_eingaben,target=generated_target) training_data=np.load('TF_intro.npz')
Unser Ziel ist es, die endgültigen Gewichte so nah wie möglich an die tatsächlichen Gewichte zu bringen., nämlich [2,-3].
Modell definieren
Hier, Wir verwenden die dichte Schicht von TensorFlow, um das Modell zu erstellen und den stochastischen Gradientenabstieg aus dem Keras-Optimierer zu importieren.
Ein Gradient ist die Steigung einer Funktion. Misst den Grad, in dem sich eine Variable mit Änderungen einer anderen Variable ändert. Mathematisch, Gradientenabstieg ist eine konvexe Funktion, deren Ausgabe die teilweise Ableitung eines Parametersatzes aus ihren Eingaben ist. Je höher die Steigung, je steiler die Steigung.
Ausgehend von einem Anfangswert, Gradient Descent läuft iterativ, um die optimalen Werte der Parameter zu finden, um den minimal möglichen Wert für die gegebene Kostenfunktion zu finden. Das Wort “stochastisch” bezieht sich auf ein zufälliges Wahrscheinlichkeitssystem oder einen Prozess. Deswegen, de Stochastischer Gradientenabstieg, einige Proben werden zufällig ausgewählt, anstelle des Datensatzes für jede Iteration.
Angenommen, der eingang hat 2 Variablen, Einlassgröße = 2 und Ausgabegröße = 1.
Wir setzen die Lernrate auf 0.02, die weder zu hoch noch zu niedrig ist, und der Epochenwert = 100.
input_size=2 output_size=1 Modelle = tf.keras.Sequential([ tf.harte.Schichten.Dense(Ausgabegröße) ]) custom_optimizer=tf.keras.optimizers.SGD(Lernrate=0.02) Modelle.compile(Optimizer=custom_optimizer,Verlust="mittlere quadratische Fehler") Modelle.fit(Trainingsdaten['Eingang'],Trainingsdaten['Ziele'],Epochen=100, ausführlich=1)
Gewichtungen und Verzerrungen ermitteln
Wir können die vorhergesagten Werte von Gewichten und Bias drucken und auch speichern.
Modelle.Schichten[0].get_weights()
[Array([[ 1.3665189], [-3.1609795]], dtype=float32), Array([4.9344487], dtype=float32)]
Hier, die erste Matrix repräsentiert die Gewichte und die zweite Matrix repräsentiert die Bias. Wir können deutlich erkennen, dass die prognostizierten Werte der Gewichte sehr nahe am tatsächlichen Wert der Gewichte liegen..
Gewichte=models.layers[0].get_weights()[0] bias=models.layers[0].get_weights()[1]
Vorhersage und Präzision
Nach der Vorhersage mit den gegebenen Gewichtungen und Bias, ein RMSE-Endwert von 0.02866, was ziemlich niedrig ist.
RMSE ist definiert als der quadratische Mittelwertfehler. Der quadratische Mittelwertfehler nimmt die Differenz für jeden beobachteten und vorhergesagten Wert. Die Formel für den RMSE-Fehler lautet::
https://www.google.com/search?q=rmse+formel&oq=RMSE+Formular&aqs=chrom.0.0i433j0j69i57j0l7.4779j0j7&sourceid=chrom&dh=UTF-8
|
|
||
|
|
||
|
|
||
|
|
out=training_data['Ziele'].runden(1) aus sklearn.metrics import mean_squared_error mittlere quadratische Fehler(generiertes_ziel, aus, quadriert=Falsch)
Wenn wir die vorhergesagten Daten in einem Streudiagramm auftragen, Wir erhalten eine Grafik wie diese:
plt.streuung(np.squeeze(models.predict_on_batch(Trainingsdaten['Eingang'])),np.squeeze(Trainingsdaten['Ziele']),c="#88c999") plt.xlabel('Eingang') plt.ylabel('Vorhergesagte Ausgabe') plt.zeigen()
Hurra! Unser Modell wird mit sehr wenigen Fehlern richtig trainiert. Dies ist das Ende Ihres ersten neuronalen Netzes. Beachten Sie, dass wir jedes Mal, wenn wir das Modell trainieren, einen anderen Präzisionswert erhalten können, aber sie werden sich nicht viel unterscheiden.
Danke fürs Lesen! Sie erreichen mich unter [E-Mail geschützt]
Die in diesem Artikel gezeigten Medien sind nicht Eigentum von DataPeaker und werden nach Ermessen des Autors verwendet.