Educoder – Mehrschichtige Perzeptron-Implementierung von Python-Logikgattern

Ebene 1: Verwendung eines Perzeptrons zur Implementierung von UND-, ODER- und NICHT-Logikgattern

Missionsdetails

Die Aufgabe dieser Ebene: Verwenden Sie das Perzeptron, um UND-, ODER- und NICHT-Logikgatter zu implementieren.

verwandte Informationen

Um diese Aufgabe abzuschließen, müssen Sie Folgendes beherrschen:

  1. Was ist ein Perzeptron?
  2. Verwenden Sie Perzeptrone, um das Prinzip der logischen UND-, ODER- und NICHT-Gatter zu realisieren.

Den Inhalt dieser Schulung entnehmen Sie bitte den Kapiteln 2.1, 2.2 und 2.3 des Buches „Einführung in Deep Learning – Theorie und Implementierung basierend auf Python“.

Was ist ein Perzeptron?

Ein Perzeptron empfängt mehrere Eingangssignale und gibt ein einzelnes Signal aus. Das hier erwähnte „Signal“ kann man sich als etwas mit „Fluss“ wie einen elektrischen Strom oder einen Fluss vorstellen. So wie Elektrizität durch einen Draht fließt und Elektronen vorwärts schickt, so bildet das Signal eines Perzeptrons einen Fluss, der Informationen weiterleitet. Allerdings hat das Signal des Perzeptrons im Gegensatz zum tatsächlichen Strom nur zwei Werte von „Fluss/kein Fluss“ (1/0). Typischerweise entspricht 0 „Signal nicht weiterleiten“ und 1 „Signal weiterleiten“.

Die folgende Abbildung ist ein Beispiel für ein Perzeptron, das zwei Eingangssignale empfängt. x1​, x2​ist das Eingangssignal, y ist das Ausgangssignal, w1​, w2​ist das Gewicht. Die ◯ in der Abbildung werden „Neuronen“ oder „Knoten“ genannt. Wenn das Eingangssignal an das Neuron gesendet wird, wird es mit einem festen Gewicht (w1​x1​, w2​x2​) multipliziert. Das Neuron berechnet die Summe der übertragenen Signale und gibt erst dann 1 aus, wenn die Summe einen bestimmten Schwellenwert überschreitet. Dies wird auch als „das Neuron wird aktiviert“ bezeichnet. Dieser Grenzwert wird hier als Schwellenwert bezeichnet, der durch das Symbol θ dargestellt wird.


Abbildung 1 Perzeptron

Formal kann ein Perzeptronmodell durch die folgende Formel dargestellt werden:

y={0,w1​x1​+w2​x2​≤θ1,w1​x1​+w2​x2​>θ​

Wenn es außerdem in Form von Matrixoperationen (Vektoroperationen) ausgedrückt wird, seien w=[w1​,w2​]T, x=[x1​,x2​]T, b=−θ, dann kann das Perzeptron wie folgt ausgedrückt werden:

y=sign(wTx+b)

Das Prinzip der Verwendung von Perzeptronen zur Implementierung von UND-, ODER- und NICHT-Logikgattern

Und, oder, und nicht sind drei gängige Logikgatter. Die Wahrheitstabelle des UND-Gatters lautet:

x1 x2 j
0 0 0
0 1 0
1 0 0
1 1 1

Die Wahrheitstabelle des ODER-Gatters lautet:

x1 x2 j
0 0 0
0 1 1
1 0 1
1 1 1

Die Wahrheitstabelle des NAND-Gatters lautet:

x1 x2 j
0 0 1
0 1 1
1 0 1
1 1 0

Mit geeigneten Einstellungen von w1​, w2​ und θ kann die obige Wahrheitstabelle realisiert werden. Hier ist eine Reihe von Referenzparameterwerten, die die oben genannten Logikgatter realisieren können: für UND-Gatter w1​=w2​=0,5, θ=0,7; für ODER-Gatter w1​=w2​=0,5, θ=0,2; Für das NAND-Gatter können Sie w1​=w2​=−0,5, θ=−0,7 festlegen. Sie können auch andere Parameterwerte festlegen, um die oben genannten Logikgatter zu implementieren.

Programmieranforderungen

Fügen Sie gemäß der Eingabeaufforderung den Code zwischen Begin und End im Editor auf der rechten Seite hinzu und verwenden Sie das Perzeptron, um die Logikgatter AND, OR und NOT zu implementieren.

Testanleitung

Die Plattform testet den von Ihnen geschriebenen Code. Ihr Programm muss keine Eingaben einlesen, das Testprogramm ruft auf und Sie haben es implementiert mlp_and, um alle Eingabewertkombinationen in den oben genannten AND-, OR- und NOT-Logikgattern zu testen und sie mit den korrekten Ergebnissen zu vergleichen.mlp_ormlp_nand

Implementierungscode: 

numpy als np importieren


 

def mlp_and(x1, x2):

    R'''

    Implementieren Sie ein UND-Logikgatter mithilfe eines Perzeptrons.

    Parameter:

    - x1: int (0 oder 1)

    - x2: int (0 oder 1)

    Ausgang:

    - y: int (0 oder 1)

        y = x1 und x2

    '''

    ########## Start ##########

def mlp_and(x1, x2):

    w1,w2,theta=0,5,0,5,0,7

    tmp=w1*x1+w2*x2

    wenn tmp>theta:

        Rückkehr 1

    elif tmp<=theta:

        0 zurückgeben

    mlp_and(0,0)

    ########## Ende ##########


 

def mlp_or(x1, x2):

    R'''

    Implementieren Sie ein ODER-Gatter mithilfe eines Perzeptrons.

    Parameter:

    - x1: int (0 oder 1)

    - x2: int (0 oder 1)

    Ausgang:

    - y: int (0 oder 1)

        y = x1 oder x2

    '''

    ########## Start ##########

numpy als np importieren

def mlp_or(x1,x2):

    x=np.array([x1,x2])

    w=np.array([0.5,0.5])

    b=-0,2

    tmp=np.sum(w*x)+b

    wenn tmp>0:

        Rückkehr 1

    elif tmp<=0:

        0 zurückgeben

    mlp_or(1,0)

    ########## Ende ##########


 

def mlp_nand(x1, x2):

    R'''

    Implementieren Sie NAND-Logikgatter mithilfe eines Perzeptrons.

    Parameter:

    - x1: int (0 oder 1)

    - x2: int (0 oder 1)

    Ausgang:

    - y: int (0 oder 1)

        y = x1 und x2

    '''

    ########## Start ##########

numpy als np importieren

def mlp_nand(x1,x2):

    x=np.array([x1,x2])

    w=np.array([-0,5,-0,5])

    b=0,7

    tmp=np.sum(w*x)+b

    wenn tmp>0:

        Rückkehr 1

    elif tmp<=0:

        0 zurückgeben

    mlp_nand(1,1)

    ########## Ende ##########

Operationsergebnis:

Ebene 2: Verwendung eines mehrschichtigen Perzeptrons zur Implementierung eines XOR-Logikgatters

Missionsdetails

Die Aufgabe dieser Ebene: Verwenden Sie ein mehrschichtiges Perzeptron, um ein XOR-Logikgatter zu implementieren.

verwandte Informationen

Um diese Aufgabe abzuschließen, müssen Sie Folgendes beherrschen:

  1. Einschränkungen des Perzeptrons;
  2. Das Prinzip der Implementierung von XOR-Logikgattern mithilfe eines Perzeptrons.

Den Inhalt dieser Schulung entnehmen Sie bitte den Kapiteln 2.4 und 2.5 im Buch „Einführung in Deep Learning – Theorie und Implementierung basierend auf Python“.

Einschränkungen des Perzeptrons

Man kann davon ausgehen, dass das Perzeptron nach einer geraden Linie im Raum sucht, sodass die Datenpunkte verschiedener Ziele auf beiden Seiten der geraden Linie aufgeteilt werden. Die folgende Abbildung beschreibt die Verteilung des ODER-Gatters in der Ebene, wobei das Dreieck einen Wert von 1 und der Kreis einen Wert von 0 darstellt. Es ist ersichtlich, dass eine gerade Linie zur Unterscheidung dieser beiden Punkte verwendet werden kann.


Abbildung 1 ODER-Gatter

Für das XOR-Gatter lautet die Wahrheitstabelle jedoch wie folgt:

x1 x2 j
0 0 0
0 1 1
1 0 1
1 1 0

Wenn man das XOR-Gatter in der Ebene ausdrückt, kann man auf die gleiche Weise feststellen, dass keine gerade Linie in der Ebene die Datenpunkte trennen kann, die zu verschiedenen Objekten gehören. Dies zeigt eine Einschränkung des Perzeptrons: Das Perzeptron ist nur für linear trennbare Datensätze wirksam und kann für komplexere Datensätze keine ideale Lösung finden.


Abbildung 2 XOR-Gatter

Das Prinzip der Verwendung eines mehrschichtigen Perzeptrons zur Realisierung eines XOR-Logikgatters

Da wir das XOR-Gatter nicht direkt mit einem Perzeptron ausdrücken können, können wir unsere Denkweise ändern und das XOR-Gatter transformieren. Mathematisch können XOR-Gatter durch UND-, ODER- und NAND-Logikgatter dargestellt werden:

x1​ xor x2​=(x1​ und x2​) nand (x1​ oder x2​)

Dies inspiriert uns dazu, die Eingabe jeweils durch ein UND-Gatter und ein ODER-Gatter zu leiten und dann das Ergebnis der beiden durch ein NAND-Gatter zu leiten, um ein exklusives ODER-Gatter zu erhalten. Im vorherigen Level wissen wir, dass UND-Gatter, ODER-Gatter und NAND-Gatter alle durch Perzeptrone realisiert werden können. Durch Stapeln der entsprechenden Perzeptrone können dann XOR-Gatter entstehen.


Abbildung 3 stellt das XOR-Gatter mit UND, ODER und NICHT dar

Bisher haben wir ein mehrschichtiges Perzeptron eingeführt . Wie der Name schon sagt, handelt es sich bei einem mehrschichtigen Perzeptron um ein Modell, das durch Stapeln von Perzeptronen entsteht. Obwohl das Perzeptron nur linear trennbare Daten verarbeiten kann, stehen Eingabe und Ausgabe des Perzeptrons aufgrund der Einführung der Vorzeichenfunktion nicht in linearem Zusammenhang. Durch das Stapeln von Perzeptronen ist das gesamte Modell daher in der Lage, nichtlineare Daten zu verarbeiten. Dies ist die Idee der Aktivierungsfunktion, die im nächsten Training vorgestellt wird.

Programmieranforderungen

Fügen Sie gemäß der Eingabeaufforderung im Editor rechts den Code zwischen Anfang und Ende hinzu und verwenden Sie das Perzeptron, um das XOR-Logikgatter zu realisieren. Die Schulung hat eine Reihe von Implementierungen von mlp_and, mlp_orund bereitgestellt mlp_nand, und Sie müssen diese zur Implementierung verwenden mlp_xor.

Testanleitung

Die Plattform testet den von Ihnen geschriebenen Code. Ihr Programm muss keine Eingaben lesen, das Testprogramm ruft Ihre Implementierung auf mlp_xor, testet alle Kombinationen von Eingabewerten im obigen XOR-Logikgatter und vergleicht es mit dem korrekten Ergebnis.

Implementierungscode:

numpy als np importieren


 

def mlp_and(x1, x2):

    x = np.array([x1, x2]).astype(np.float32)

    Gewicht = np.array([0,5, 0,5]).astype(np.float32)

    Bias = -0,7

    y = np.dot(weight, x) + Bias

    wenn y <= 0:

        0 zurückgeben

    anders:

        Rückkehr 1


 

def mlp_or(x1, x2):

    x = np.array([x1, x2]).astype(np.float32)

    Gewicht = np.array([0,5, 0,5]).astype(np.float32)

    Voreingenommenheit = -0,2

    y = np.dot(weight, x) + Bias

    wenn y <= 0:

        0 zurückgeben

    anders:

        Rückkehr 1


 

def mlp_nand(x1, x2):

    x = np.array([x1, x2]).astype(np.float32)

    Gewicht = np.array([-0,5, -0,5]).astype(np.float32)

    Bias = 0,7

    y = np.dot(weight, x) + Bias

    wenn y <= 0:

        0 zurückgeben

    anders:

        Rückkehr 1


 

def mlp_xor(x1, x2):

    R'''

    Implementieren Sie XOR-Logikgatter mithilfe eines mehrschichtigen Perzeptrons.

    Parameter:

    - x1: int (0 oder 1)

    - x2: int (0 oder 1)

    Ausgang:

    - y: int (0 oder 1)

        y = x1 xoder x2

    '''

    ########## Start ##########

def mlp_xor(x1,x2):

    s1=mlp_nand(x1,x2)

    s2=mlp_or(x1,x2)

    y=mlp_and(s1,s2)

    gib y zurück

r3=mlp_xor(0,1)

    ########## Ende ##########

Operationsergebnis:

 

 

Supongo que te gusta

Origin blog.csdn.net/qq_57409899/article/details/124110703
Recomendado
Clasificación