Es ist ein Material- und Memo-Schreiben für die Lernsitzung. Wir können die Gültigkeit des Inhalts nicht garantieren, daher empfehlen wir Ihnen, keine Zitate zu erstellen.
_2 Eingabe Perceptron (aus "Deep Learning from Zero" S.22) _
Unter der Annahme, dass die Ausgabe $ y $ ist, können die obigen Elemente wie folgt mathematisch ausgedrückt werden.
y = \left\{
\begin{array}{ll}
0 & (w^1x^1 + w^2x^2 \leqq \theta) \\
1 & (w^1x^1 + w^2x^2 \gt \theta)
\end{array}
\right.
_P.23 Siehe "Abb. 2-2 AND Gate Truth Table" _
_P.24 Siehe "Abbildung 2-3 NAND Gate Truth Table" _
--NAND = Nicht AND = AND Verhalten gegenüber dem Gate
Definieren und führen Sie die UND-Schaltung wie folgt aus.
def AND(x1, x2):
w1, w2, theta = 0.5, 0.5, 0.7
tmp = x1 * w1 + x2 * w2
if tmp <= theta:
return 0
elif tmp > theta:
return 1
y = \left\{
\begin{array}{ll}
0 & (w^1x^1 + w^2x^2 \leqq \theta) \\
1 & (w^1x^1 + w^2x^2 \gt \theta)
\end{array}
\right.
y = \left\{
\begin{array}{ll}
0 & (b + w^1x^1 + w^2x^2 \leqq 0) \\
1 & (b + w^1x^1 + w^2x^2 \gt 0)
\end{array}
\right.
Lassen Sie uns mit dem Dolmetscher sprechen.
>>> import numpy as np
>>> x = np.array([0, 1]) #Eingang
>>> w = np.array([0.5, 0.5]) #Gewicht
>>> b = -0.7 #vorspannen
>>> w * x
>>> np.sum(w * x)
>>> np.sum(w * x) + b
Lassen Sie uns jede Schaltung von AND / NAND / OR basierend auf dem vorherigen Abschnitt implementieren.
def AND(x1, x2):
x = np.array([x1, x2])
w = np.array([0.5, 0.5])
b = -0.7
tmp = np.sum(w * x) + b
if tmp <= 0:
return 0
else:
return 1
def NAND(x1, x2):
x = np.array([x1, x2])
#Nur Gewicht und Voreingenommenheit unterscheiden sich von UND
w = np.array([-0.5, -0.5])
b = 0.7
tmp = np.sum(w * x) + b
if tmp <= 0:
return 0
else:
return 1
def OR(x1, x2):
x = np.array([x1, x2])
#Nur die Vorspannung unterscheidet sich von UND
w = np.array([0.5, 0.5])
b = -0.2
tmp = np.sum(w * x) + b
if tmp <= 0:
return 0
else:
return 1
Der Begriff Voreingenommenheit bedeutet "es bekommen". Dies bedeutet, wie viel Sie die Ausgabe erhalten (einen Wert hinzufügen) können, wenn keine Eingabe vorhanden ist (wenn die Eingabe 0 ist). Tatsächlich gibt die Berechnung von b + w1 x1 + w2 x2 in Gleichung (2.2) nur den Vorspannungswert aus, wenn die Eingänge x1 und x2 0 sind.
(Auszug aus S.27)
--XOR kann durch "Layering" ausgedrückt werden.
Eine XOR-Schaltung, die 1 ausgibt, wenn einer der Eingänge 1 und der andere 0 ist, wird durch eine Kombination von vorhandenem UND / NAND / ODER dargestellt. Lassen Sie uns das Verhalten jeder Schaltung noch einmal klären.
--AND ... Ausgänge 1, wenn die beiden Eingänge 1 sind, andernfalls Ausgänge 0. --NAND ... Gibt 0 aus, wenn die beiden Eingänge 1 sind, andernfalls 1.
Tatsächlich kann dies durch die folgende Verdrahtung realisiert werden: Der Anfangswert ist $ x ^ 1, x ^ 2 $, die Ausgabe von NAND ist $ s ^ 1 $ und die Ausgabe von OR ist $ s ^ 2 $.
Überprüfen Sie die Wahrheitstabelle.
Lassen Sie es uns im Code implementieren, der auf dem vorherigen Abschnitt basiert.
def XOR(x1, x2):
s1 = NAND(x1, x2)
s2 = OR(x1, x2)
y = AND(s1, s2)
return y
--Perceptron ist ein Algorithmus mit Eingabe und Ausgabe. Bei einer bestimmten Eingabe wird ein fester Wert ausgegeben.
Recommended Posts