Heim  >  Artikel  >  Backend-Entwicklung  >  Lassen Sie uns kurz den Inhalt der Erstellung neuronaler Netzwerkmodelle in Python verstehen

Lassen Sie uns kurz den Inhalt der Erstellung neuronaler Netzwerkmodelle in Python verstehen

不言
不言nach vorne
2018-10-08 17:18:123017Durchsuche

Der Inhalt dieses Artikels soll Ihnen einen kurzen Überblick über die Erstellung eines neuronalen Netzwerkmodells in Python geben. Ich hoffe, dass er für Sie hilfreich ist.

Zusammenfassung: Neugierig, wie neuronale Netze funktionieren? Probieren Sie es aus. Der beste Weg, die Funktionsweise neuronaler Netze zu verstehen, besteht darin, selbst ein einfaches neuronales Netz zu erstellen.

Neuronales Netzwerk (NN), auch bekannt als künstliches neuronales Netzwerk (ANN), ist eine Teilmenge von Lernalgorithmen im Bereich des maschinellen Lernens und lehnt sich lose an das Konzept biologischer neuronaler Netzwerke an. Derzeit werden neuronale Netze häufig in Bereichen wie Computer Vision und Verarbeitung natürlicher Sprache eingesetzt. Andrey Bulezyuk, ein hochrangiger deutscher Experte für maschinelles Lernen, sagte: „Neuronale Netze revolutionieren das maschinelle Lernen, weil sie komplexe Abstraktionen in verschiedenen Disziplinen und Branchen ohne große menschliche Beteiligung effektiv simulieren können.“
Im Allgemeinen umfassen künstliche neuronale Netze das Netzwerk die folgenden Komponenten:

  • Eingabeschicht, die Daten empfängt und überträgt;

  • verborgene Schicht; 🎜>Ausgabeschicht;

  • Das Gewicht zwischen den Schichten;

  • Die von jeder verborgenen Schicht verwendete Aktivierungsfunktion; 🎜>

    In diesem Tutorial wird eine einfache Sigmoid-Aktivierungsfunktion verwendet. Bitte beachten Sie jedoch, dass in tiefen neuronalen Netzwerken in Netzwerkmodellen die Sigmoid-Aktivierungsfunktion im Allgemeinen nicht die erste Wahl ist, da sie anfällig für Gradientendispersion ist.

  • Darüber hinaus gibt es verschiedene Arten von künstlichen neuronalen Netzen, wie zum Beispiel Feedforward-Neuronale Netze, Faltungs-Neuronale Netze und wiederkehrende Neuronale Netze. In diesem Artikel wird als Beispiel ein einfaches Feedforward- oder wahrnehmungsbezogenes neuronales Netzwerk verwendet. Diese Art von künstlichem neuronalem Netzwerk überträgt Daten direkt von vorne nach hinten, was als Vorwärtsausbreitungsprozess bezeichnet wird.
  • Das Training von Feedforward-Neuronen erfordert normalerweise einen Backpropagation-Algorithmus, der die Bereitstellung entsprechender Eingabe- und Ausgabesätze für das Netzwerk erfordert. Wenn Eingabedaten an ein Neuron übertragen werden, werden diese entsprechend verarbeitet und die resultierende Ausgabe wird an die nächste Schicht übertragen.

    Die folgende Abbildung zeigt einfach die Struktur eines neuronalen Netzwerks:

Außerdem lässt sich die Funktionsweise eines neuronalen Netzwerks am besten verstehen, indem man lernt, wie es funktioniert um eines von Grund auf mit einer beliebigen Toolbox zu erstellen. In diesem Artikel zeigen wir, wie man mit Python ein einfaches neuronales Netzwerk erstellt.

Problem

Die folgende Tabelle zeigt das Problem, das wir lösen werden: Lassen Sie uns kurz den Inhalt der Erstellung neuronaler Netzwerkmodelle in Python verstehenWir werden das neuronale Netzwerk trainieren, damit es den korrekten Ausgabewert vorhersagen kann, wenn ein neuer Satz von gegeben wird Daten.

Wie Sie der Tabelle entnehmen können, ist der Ausgabewert immer gleich dem ersten Wert im Eingabeabschnitt. Daher können wir davon ausgehen, dass der Ausgabewert (?) der neuen Situation 1 ist.

Mal sehen, ob wir mit etwas Python-Code das gleiche Ergebnis erzielen können.

Neurale Netzwerkklasse erstellen|NeuralNetwork-Klasse

Wir werden eine NeuralNetwork-Klasse in Python erstellen, um Neuronen zu trainieren, um genaue Vorhersagen zu liefern. Wir werden die neuronale Netzwerkbibliothek nicht verwenden, um dieses einfache Beispiel für ein neuronales Netzwerk zu erstellen, sondern die grundlegende Numpy-Bibliothek importieren, um die Berechnung zu unterstützen.

Die Numpy-Bibliothek ist eine Basisbibliothek für die Datenverarbeitung. Sie verfügt über die folgenden vier wichtigen Berechnungsmethoden:

EXP – wird zur Generierung des natürlichen Exponenten verwendet;

Array – wird zum Generieren von Matrizen verwendet;

  • Punkt – wird für die Matrixmultiplikation verwendet;

    zufällig – wird verwendet um Zufallszahlen zu generieren;

  • Anwenden der Sigmoid-Funktion

  • Wir verwenden die Sigmoid-Funktion, die eine „S“-förmige Kurve zeichnet. Sie dient als Aktivierungsfunktion von das in diesem Artikel erstellte neuronale Netzwerk.
  • Diese Funktion kann jeden Wert zwischen 0 und 1 abbilden und hilft uns, die gewichtete Summe der Eingabe zu normalisieren.
Danach erstellen wir die Ableitung der Sigmoidfunktion, um bei der Berechnung grundlegender Anpassungen der Gewichte zu helfen.

Die Ausgabe der Sigmoid-Funktion kann zur Generierung ihrer Ableitung verwendet werden. Wenn die Ausgabevariable beispielsweise „x“ ist, dann ist ihre Ableitung x *(1-x).

Training des Modells

Training des Modells bedeutet die Phase, in der wir dem neuronalen Netzwerk beibringen, genaue Vorhersagen zu treffen. Jede Eingabe hat eine Gewichtung – positiv oder negativ, was bedeutet, dass Eingaben mit großer positiver oder großer negativer Gewichtung einen größeren Einfluss auf die resultierende Ausgabe haben. Lassen Sie uns kurz den Inhalt der Erstellung neuronaler Netzwerkmodelle in Python verstehenBeachten Sie, dass beim ersten Training des Modells jedes Gewicht mit einer Zufallszahl initialisiert wird.

Das Folgende ist der Trainingsprozess im Beispielproblem des neuronalen Netzwerks, das in diesem Artikel konstruiert wurde:

1 Holen Sie sich die Eingaben aus dem Trainingsdatensatz und nehmen Sie einige Anpassungen entsprechend ihrer Gewichtung vor , und berechnen Sie das neuronale Netzwerk durch Die Ausgabemethode wird verwendet, um Schicht für Schicht zu übertragen
  • 2. Berechnen Sie die Fehlerrate der Backpropagation. In diesem Fall handelt es sich um den Fehler zwischen der vorhergesagten Ausgabe des Neurons und der erwarteten Ausgabe des Trainingsdatensatzes.

  • 3. Verwenden Sie den Fehler gewichtet Ableitung Die Formel nimmt einige kleine Gewichtsanpassungen vor.

  • 4. Wiederholen Sie diesen Vorgang 15.000 Mal, und bei jeder Iteration wird der gesamte Trainingssatz gleichzeitig verarbeitet >

    Hier verwenden wir die Funktion „.T“, um die Matrix zu beeinflussen. Daher werden die Zahlen folgendermaßen gespeichert:
  • Lassen Sie uns kurz den Inhalt der Erstellung neuronaler Netzwerkmodelle in Python verstehen Schließlich werden die Gewichte der Neuronen für die bereitgestellten Trainingsdaten optimiert. Wenn die Ausgabe des neuronalen Netzwerks mit der erwarteten Ausgabe übereinstimmt, bedeutet dies, dass das Training abgeschlossen ist und genaue Vorhersagen getroffen werden können. Dies ist die Methode der Backpropagation.

    Kapselung

    Nach der Initialisierung der NeuralNetwork-Klasse und dem Ausführen des gesamten Programms finden Sie hier schließlich den vollständigen Code zum Erstellen eines neuronalen Netzwerks in einem Python-Projekt:

    import numpy as np
    
    class NeuralNetwork():
        
        def __init__(self):
            # 设置随机数种子
            np.random.seed(1)
            
            # 将权重转化为一个3x1的矩阵,其值分布为-1~1,并且均值为0
            self.synaptic_weights = 2 * np.random.random((3, 1)) - 1
    
        def sigmoid(self, x):
            # 应用sigmoid激活函数
            return 1 / (1 + np.exp(-x))
    
        def sigmoid_derivative(self, x):
            #计算Sigmoid函数的偏导数
            return x * (1 - x)
    
        def train(self, training_inputs, training_outputs, training_iterations):
            
            # 训练模型
            for iteration in range(training_iterations):
                # 得到输出
                output = self.think(training_inputs)
    
                # 计算误差
                error = training_outputs - output
                
                # 微调权重
                adjustments = np.dot(training_inputs.T, error * self.sigmoid_derivative(output))
    
                self.synaptic_weights += adjustments
    
        def think(self, inputs):
            # 输入通过网络得到输出   
            # 转化为浮点型数据类型
            
            inputs = inputs.astype(float)
            output = self.sigmoid(np.dot(inputs, self.synaptic_weights))
            return output
    
    
    if __name__ == "__main__":
    
        # 初始化神经类
        neural_network = NeuralNetwork()
    
        print("Beginning Randomly Generated Weights: ")
        print(neural_network.synaptic_weights)
    
        #训练数据
        training_inputs = np.array([[0,0,1],
                                    [1,1,1],
                                    [1,0,1],
                                    [0,1,1]])
    
        training_outputs = np.array([[0,1,1,0]]).T
    
        # 开始训练
        neural_network.train(training_inputs, training_outputs, 15000)
    
        print("Ending Weights After Training: ")
        print(neural_network.synaptic_weights)
    
        user_input_one = str(input("User Input One: "))
        user_input_two = str(input("User Input Two: "))
        user_input_three = str(input("User Input Three: "))
        
        print("Considering New Situation: ", user_input_one, user_input_two, user_input_three)
        print("New Output data: ")
        print(neural_network.think(np.array([user_input_one, user_input_two, user_input_three])))
        print("Wow, we did it!")

    Nach dem Ausführen des Codes wird Folgendes ausgegeben:

    Oben ist ein einfaches neuronales Netzwerk, das wir erstellen konnten. Zuerst beginnt das neuronale Netzwerk, sich selbst einige zufällige Gewichte zuzuweisen, danach trainiert es sich anhand von Trainingsbeispielen. Lassen Sie uns kurz den Inhalt der Erstellung neuronaler Netzwerkmodelle in Python verstehen

    Wenn also eine neue Beispieleingabe [1,0,0] auftritt, beträgt ihr Ausgabewert 0,9999584. Die erwartete richtige Antwort ist 1. Man kann sagen, dass die beiden sehr nahe beieinander liegen. Wenn man bedenkt, dass die Sigmoid-Funktion eine nichtlineare Funktion ist, ist dieser Fehler akzeptabel.

    Darüber hinaus verwendet dieser Artikel nur eine Schicht eines neuronalen Netzwerks, um einfache Aufgaben auszuführen. Was würde passieren, wenn wir Tausende dieser künstlichen neuronalen Netze zusammenfügen würden? Können wir das menschliche Denken zu 100 % nachahmen? Die Antwort lautet ja, aber die Umsetzung ist derzeit schwierig. Man kann nur sagen, dass es sehr ähnlich ist. Interessierte Leser können Materialien zum Thema Deep Learning lesen.

    Das obige ist der detaillierte Inhalt vonLassen Sie uns kurz den Inhalt der Erstellung neuronaler Netzwerkmodelle in Python verstehen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen