Hallo! Ich bin ein super Anfänger, der mit O'Reillys Buch "Deep Learning from Grund" lernt. Da es eine große Sache ist, wollte ich aufzeichnen, was ich gelernt habe, also schreibe ich einen Artikel, der auch als Ausgabepraxis dient. Es tut mir leid, wenn es Fehler gibt. Es wäre sehr hilfreich, wenn Sie darauf hinweisen könnten.
Windows10 Python3.7.3 Jupyter Notebook
Ein Algorithmus, der mehrere Signale empfängt und ein Signal ausgibt. Dieses Mal werden wir dieses Perceptron auf einfache Weise implementieren.
Das UND-Gatter ist in der folgenden Tabelle dargestellt. Das von x1 und x2 empfangene Signal und das von y ausgegebene Signal. Wenn sowohl x1 als auch x2 1 sind, wird 1 ausgegeben.
x1 | x2 | y |
---|---|---|
0 | 0 | 0 |
1 | 0 | 0 |
0 | 1 | 0 |
1 | 1 | 1 |
Der Code. Das steht im Buch. w1 und w2 sind Gewichte. Setzen Sie den Wert, der durch Multiplizieren der Eingabe x1 und x2 mit den Gewichten w1 und w2 in tmp erhalten wird. Theta (θ) ist der Schwellenwert, der 1 zurückgibt, wenn tmp den Schwellenwert überschreitet, und 0, wenn dies nicht der Fall ist.
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
Die Ausgabe.
AND(0,0) #0 wird ausgegeben
AND(1,0) #0 wird ausgegeben
AND(0,1) #0 wird ausgegeben
AND(1,1) #1 wird ausgegeben
Ich habe die erwarteten Ergebnisse erzielt!
Die NAND-Gatter sind in der folgenden Tabelle aufgeführt. Das von x1 und x2 empfangene Signal und das von y ausgegebene Signal. Wenn sowohl x1 als auch x2 1 sind, wird 0 ausgegeben.
x1 | x2 | y |
---|---|---|
0 | 0 | 1 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 0 |
Der Code. Gleich wie UND-Gatter, außer dass w1, w2 und Theta negativ sind.
def NAND(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
Die Ausgabe.
NAND(0,0) #1 wird ausgegeben
NAND(1,0) #1 wird ausgegeben
NAND(0,1) #1 wird ausgegeben
NAND(1,1) #0 wird ausgegeben
Ich habe das erwartete Ergebnis!
Das ODER-Gatter ist in der folgenden Tabelle dargestellt. Das von x1 und x2 empfangene Signal und das von y ausgegebene Signal. Wenn sowohl x1 als auch x2 0 sind, wird 0 ausgegeben.
x1 | x2 | y |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 1 |
Ich habe bei der Durchführung der Parameteradressierungsstrategie darüber nachgedacht. Der endgültige Code. Die Grundlagen sind dieselben wie bei AND- und NAND-Gattern, die Parameter werden jedoch erneut geändert.
def OR(x1, x2):
w1, w2, theta = 0.5, 0.5, 0.4
tmp = x1*w1 + x2*w2
if tmp <= theta:
return 0
elif tmp > theta:
return 1
Die Ausgabe.
OR(0,0) #0 wird ausgegeben
OR(1,0) #1 wird ausgegeben
OR(0,1) #1 wird ausgegeben
OR(1,1) #1 wird ausgegeben
Ich habe die erwarteten Ergebnisse erzielt!
Das sind übrigens die toten Parameter. Bitte beziehen Sie sich nicht darauf. "w1, w2, Theta = 0,5, 0,5, -0,7" Alle wurden 1. "w1, w2, Theta = 0,5, 0,5, 0,5" Es war ein UND-Gatter lol
Ich kann mir diesen Bereich immer noch leisten. (Es lebt nicht, danach wird es sehr schwierig ...)
Dieses Mal dachten die Leute über w1, w2 und Theta (θ) nach, aber beim maschinellen Lernen wie dem Tiefenlernen führt der Computer automatisch die Arbeit zur Bestimmung dieser Werte durch. In diesem Sinne möchte ich das nächste Mal Gewichte und Vorurteile einführen und das, was ich diesmal geschrieben habe, neu schreiben.
Danke fürs Lesen!
2020/6/8 Ich habe eine Titeländerung und einen Kommentar hinzugefügt.
Recommended Posts