salut! Je suis un super débutant qui étudie en utilisant le livre d'O'Reilly "Deep Learning from scratch". Comme c'est un gros problème, je voulais enregistrer ce que j'ai appris, donc j'écris un article qui sert également de pratique de sortie. Je suis désolé s'il y a des erreurs. Ce serait très utile si vous pouviez le signaler.
Windows10 Python3.7.3 Jupyter Notebook
Un algorithme qui reçoit plusieurs signaux et émet un signal. Cette fois, nous allons implémenter ce Perceptron de manière simple.
La porte ET est indiquée dans le tableau ci-dessous. Le signal reçu par x1 et x2, et le signal émis par y. Si x1 et x2 sont tous deux 1, la sortie 1.
x1 | x2 | y |
---|---|---|
0 | 0 | 0 |
1 | 0 | 0 |
0 | 1 | 0 |
1 | 1 | 1 |
Le code. C'est dans le livre. w1 et w2 sont des poids. Mettez la valeur obtenue en multipliant les entrées x1 et x2 par les poids w1 et w2, respectivement, en tmp. thêta (θ) est le seuil, qui renvoie 1 si tmp dépasse le seuil et 0 si ce n'est pas le cas.
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
Le résultat.
AND(0,0) #0 est la sortie
AND(1,0) #0 est la sortie
AND(0,1) #0 est la sortie
AND(1,1) #1 est la sortie
J'ai eu les résultats que j'attendais!
Les portes NAND sont indiquées dans le tableau ci-dessous. Le signal reçu par x1 et x2, et le signal émis par y. Si x1 et x2 sont tous deux 1, 0 est émis.
x1 | x2 | y |
---|---|---|
0 | 0 | 1 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 0 |
Le code. Identique à la porte ET sauf que w1, w2 et thêta sont négatifs.
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
Le résultat.
NAND(0,0) #1 est la sortie
NAND(1,0) #1 est la sortie
NAND(0,1) #1 est la sortie
NAND(1,1) #0 est la sortie
J'ai eu le résultat attendu!
La porte OU est indiquée dans le tableau ci-dessous. Le signal reçu par x1 et x2, et le signal émis par y. Si x1 et x2 valent tous les deux 0, 0 est émis.
x1 | x2 | y |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 1 |
J'y ai réfléchi en réalisant la stratégie d'adressage des paramètres. Le code final. Les bases sont les mêmes que pour les portes AND et NAND, mais les paramètres sont à nouveau modifiés.
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
Le résultat.
OR(0,0) #0 est la sortie
OR(1,0) #1 est la sortie
OR(0,1) #1 est la sortie
OR(1,1) #1 est la sortie
J'ai eu les résultats que j'attendais!
Au fait, ce sont les paramètres morts. Veuillez ne pas y faire référence.
«w1, w2, thêta = 0,5, 0,5, -0,7» Tous sont devenus 1.
w1, w2, thêta = 0,5, 0,5, 0,5
C'était une porte ET lol
Je peux encore me permettre cette zone. (Ce n'est pas vivant, ce sera très difficile après ça ...)
Cette fois, les gens ont pensé à w1, w2 et thêta (θ), mais dans l'apprentissage automatique tel que l'apprentissage profond, l'ordinateur effectue automatiquement le travail de détermination de ces valeurs. La prochaine fois, dans cet esprit, j'aimerais introduire des poids et des préjugés et réécrire ce que j'ai écrit cette fois.
Merci pour la lecture!
08/06/2020 J'ai ajouté un changement de titre et un commentaire.
Recommended Posts