[PYTHON] J'ai essayé d'implémenter Perceptron Part 1 [Deep Learning from scratch]

introduction

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.

environnement

Windows10 Python3.7.3 Jupyter Notebook

Qu'est-ce que Perceptron?

Un algorithme qui reçoit plusieurs signaux et émet un signal. Cette fois, nous allons implémenter ce Perceptron de manière simple.

Implémentation de la porte ET utilisant le seuil θ

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!

Implémentation de la porte NAND en utilisant le seuil θ

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!

Implémentation de la porte OU utilisant le seuil θ

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

en conclusion

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

J'ai essayé d'implémenter Perceptron Part 1 [Deep Learning from scratch]
[Deep Learning from scratch] J'ai essayé d'expliquer le décrochage
[Deep Learning from scratch] J'ai essayé d'implémenter la couche sigmoïde et la couche Relu
J'ai essayé d'implémenter Deep VQE
Mémo d'auto-apprentissage "Deep Learning from scratch" (partie 12) Deep learning
"Deep Learning from scratch" Mémo d'auto-apprentissage (n ° 16) J'ai essayé de créer SimpleConvNet avec Keras
"Deep Learning from scratch" Mémo d'auto-apprentissage (n ° 17) J'ai essayé de créer DeepConvNet avec Keras
Apprentissage profond à partir de zéro
J'ai essayé le deep learning
[Deep Learning from scratch] J'ai essayé d'expliquer la confirmation du gradient d'une manière facile à comprendre.
Deep Learning from scratch ① Chapitre 6 "Techniques liées à l'apprentissage"
Deep Learning from scratch Chapter 2 Perceptron (lecture du mémo)
J'ai essayé de mettre en œuvre un apprentissage en profondeur qui n'est pas profond avec uniquement NumPy
Apprentissage profond à partir de zéro 1 à 3 chapitres
J'ai essayé d'implémenter PCANet
J'ai essayé d'implémenter StarGAN (1)
[Deep Learning from scratch] J'ai implémenté la couche Affine
J'ai essayé d'implémenter le perceptron artificiel avec python
[Python] [Traitement du langage naturel] J'ai essayé le Deep Learning ❷ fait de toutes pièces en japonais ①
[Python] Deep Learning: J'ai essayé d'implémenter Deep Learning (DBN, SDA) sans utiliser de bibliothèque.
J'ai essayé d'extraire le dessin au trait de l'image avec Deep Learning
J'ai essayé d'implémenter Cifar10 avec la bibliothèque SONY Deep Learning NNabla [Nippon Hurray]
J'ai essayé de classer Hanana Oba et Emiri Otani par apprentissage profond (partie 2)
[Partie 4] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques
[Partie 1] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques
[Partie 3] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques
J'ai essayé d'implémenter la détection d'anomalies par apprentissage de structure clairsemée
J'ai essayé de prédire les courses de chevaux en faisant tout, de la collecte de données à l'apprentissage en profondeur
Apprentissage profond à partir de zéro (calcul des coûts)
J'ai essayé de mettre en place une validation contradictoire
[Partie 2] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques
J'ai essayé l'apprentissage en profondeur avec Theano
Mémo d'apprentissage profond créé à partir de zéro
J'ai essayé d'implémenter Realness GAN
J'ai essayé d'écrire dans un modèle de langage profondément appris
Mémo d'auto-apprentissage "Deep Learning from scratch" (partie 8) J'ai dessiné le graphique du chapitre 6 avec matplotlib
J'ai essayé de rendre le deep learning évolutif avec Spark × Keras × Docker
Version Lua Apprentissage profond à partir de zéro Partie 6 [Traitement d'inférence de réseau neuronal]
J'ai essayé de faire la reconnaissance de caractères manuscrits de Kana Partie 1/3 D'abord à partir de MNIST
J'ai essayé d'implémenter PLSA en Python
Apprentissage amélioré pour apprendre de zéro à profond
J'ai essayé d'implémenter Autoencoder avec TensorFlow
J'ai essayé d'implémenter la permutation en Python
[Mémo d'apprentissage] Le Deep Learning fait de zéro [Chapitre 7]
Apprentissage profond à partir de zéro (propagation vers l'avant)
Apprentissage profond / Apprentissage profond à partir de zéro 2-Essayez de déplacer GRU
Deep learning / Deep learning made from scratch Chapitre 6 Mémo
J'ai essayé d'implémenter PLSA dans Python 2
[Mémo d'apprentissage] Deep Learning fait de zéro [Chapitre 5]
[Mémo d'apprentissage] Le Deep Learning fait de zéro [Chapitre 6]
J'ai essayé d'implémenter ADALINE en Python
Alignement d'image: du SIFT au deep learning
J'ai essayé d'implémenter PPO en Python
J'ai essayé d'implémenter CVAE avec PyTorch
"Deep Learning from scratch" avec Haskell (inachevé)
Deep learning / Deep learning made from scratch Chapitre 7 Mémo
[Windows 10] Construction de l'environnement "Deep Learning from scratch"
[Deep Learning from scratch] À propos de l'optimisation des hyper paramètres
[Mémo d'apprentissage] Deep Learning fait de zéro [~ Chapitre 4]