Outils pour utilisateurs

Outils du site


l_intelligence_du_semaphore

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
l_intelligence_du_semaphore [2019/02/08 16:46]
serge [Sigmoïd]
l_intelligence_du_semaphore [2020/09/05 12:40] (Version actuelle)
serge [La même chose avec Cupy ou Tensorflow]
Ligne 1: Ligne 1:
 ====== L'​intelligence du sémaphore ====== ====== L'​intelligence du sémaphore ======
 +<WRAP center round box 80% centeralign>​
 +**{{tagpage>​semaphore|Sémaphores}}** ​ ....  **{{tagpage>​bge|Blender Game Engine}}** ....  **{{tagpage>​ia|Intelligence Artificielle}}**
 +</​WRAP>​
 +<WRAP center round box 60% centeralign>​
 +C'est quoi un sémaphore ?
 +{{ youtube>​F3sY6_fOx2I?​medium }}
 +{{ chappe.jpeg?​400 }}
 +</​WRAP>​
  
 <WRAP center round box 60% centeralign>​ <WRAP center round box 60% centeralign>​
-**{{tagpage>ia|Toutes les pages sur L'Intelligence Artificielle}}**+**Calcul de [[Le sémaphore avec TensorFlow|Le sémaphore avec TensorFlow]] sur GPU au lieu du CPU avec TensorFlow** 
 +</​WRAP>​ 
 +=====Les sources sur GitHub===== 
 +  * **[[https://​github.com/​sergeLabo/​semaphore|semaphore chez github.com]]** 
 +=====Les images utilisées pour l'​apprentissage===== 
 +====Images sorties de Blender==== 
 +<WRAP group> 
 +<WRAP third column>​ 
 +{{media_03:​shot_0_a.png?​200|}} 
 +</WRAP> 
 +<WRAP third column>​ 
 +{{media_03:​shot_1_b.png?​200|}} 
 +</​WRAP>​ 
 +<WRAP third column>​ 
 +{{media_03:​shot_2_c.png?​200|}} 
 +</​WRAP>​ 
 +</​WRAP>​ 
 +====Images adaptées pour l'​apprentissage==== 
 +L'optimisation a montré que la meilleure solution est avec ce type d'​image. 
 +<WRAP group> 
 +<WRAP third column>​ 
 +{{media_01:​shot_0_a.png?​200|}} 
 +</​WRAP>​ 
 +<WRAP third column>​ 
 +{{media_01:​shot_1_.png?​200|}} 
 +</​WRAP>​ 
 +<WRAP third column>​ 
 +{{media_01:​shot_2_b.png?​200|}} 
 +</​WRAP>​
 </​WRAP>​ </​WRAP>​
 +
  
 ===== Des maths ! ==== ===== Des maths ! ====
 ====Relu Rectifier neural networks==== ====Relu Rectifier neural networks====
 +{{ relu.jpg?​400 |}}
   * **[[https://​en.wikipedia.org/​wiki/​Rectifier_(neural_networks)|Rectifier (neural networks)]]** ​ sur Wikipedia en   * **[[https://​en.wikipedia.org/​wiki/​Rectifier_(neural_networks)|Rectifier (neural networks)]]** ​ sur Wikipedia en
 <code python> <code python>
Ligne 26: Ligne 64:
 <code python> <code python>
 def relu_prime(z):​ def relu_prime(z):​
-    """​La fonction de Heaviside (également fonction échelon unité, fonction +    """​La fonction de Heaviside (également fonction échelon unité, fonction marche d'​escalier) est la fonction indicatrice de R. 
-    ​marche d'​escalier) est la fonction indicatrice de R. +    ​ 
-    Une fonction ​fonction indicatrice,​ est une fonction définie sur un +Une fonction indicatrice,​ est une fonction définie sur un ensemble E qui explicite l’appartenance ou non à un sous-ensemble F de E de tout élément de E.  
-    ​ensemble E qui explicite l’appartenance ou non à un sous-ensemble F de E +C'est donc la fonction H (discontinue en 0) prenant la valeur 1 pour tous les réels positifs et la valeur 0 pour les réels strictement négatifs.
-    ​de tout élément de E.  +
-    C'est donc la fonction H (discontinue en 0) prenant la valeur 1 pour tous +
-    ​les réels positifs et la valeur 0 pour les réels strictement négatifs.+
     """​     """​
     return np.asarray(z > 0, dtype=np.float32)     return np.asarray(z > 0, dtype=np.float32)
 </​code>​ </​code>​
 ====Sigmoïd==== ====Sigmoïd====
 +{{ sigmoid.png?​400 |}}
   * **[[https://​fr.wikipedia.org/​wiki/​Sigmo%C3%AFde_(math%C3%A9matiques)|Sigmoïde]]** ​ sur Wikipedia fr   * **[[https://​fr.wikipedia.org/​wiki/​Sigmo%C3%AFde_(math%C3%A9matiques)|Sigmoïde]]** ​ sur Wikipedia fr
-Elle représente la fonction de répartition de la loi logistique. Elle est souvent utilisée dans les réseaux de neurones parce qu'​elle est dérivable, ce qui est une contrainte pour l'​algorithme de [[https://​fr.wikipedia.org/​wiki/​R%C3%A9tropropagation_du_gradient|rétropropagation]] de https://​fr.wikipedia.org/​wiki/​Perceptron_multicouche#​Perceptron_multicouche_%C3%A0_r%C3%A9tropropagation|Werbos]]. La forme de la dérivée de sa fonction inverse est extrêmement simple et facile à calculer, ce qui améliore les performances des algorithmes. ​+Elle représente la fonction de répartition de la loi logistique. Elle est souvent utilisée dans les réseaux de neurones parce qu'​elle est dérivable, ce qui est une contrainte pour l'​algorithme de [[https://​fr.wikipedia.org/​wiki/​R%C3%A9tropropagation_du_gradient|rétropropagation]] de [[https://​fr.wikipedia.org/​wiki/​Perceptron_multicouche#​Perceptron_multicouche_%C3%A0_r%C3%A9tropropagation|Werbos]]. La forme de la dérivée de sa fonction inverse est extrêmement simple et facile à calculer, ce qui améliore les performances des algorithmes. ​
 <code python> <code python>
 def sigmoid(x): def sigmoid(x):
-    """​la fonction sigmoïde est une courbe en S+    """​La fonction sigmoïde est une courbe en S."""​
-    https://fr.wikipedia.org/​wiki/​Sigmo%C3%AFde_(math%C3%A9matiques)"""​+
     return 1 / (1 + np.exp(-x))     return 1 / (1 + np.exp(-x))
 </​code>​ </​code>​
Ligne 58: Ligne 93:
  
 ====Diagonale de 1==== ====Diagonale de 1====
-numpy.eye(N,​ M=None, k=0, dtype=<​class '​float'>,​ order='​C'​)\\ +{{ media_01:​matrice_3x3_1.png?200 |}}
-Return a 2-D array with ones on the diagonal and zeros elsewhere.+
  
 +  numpy.eye(N,​ M=None, k=0, dtype=<​class '​float'>,​ order='​C'​)
 +  ​
 +  Return a 2-D array with ones on the diagonal and zeros elsewhere.
 Matrice ou la sortie est idéale: le 1 correspond à entée[i] = sortie[i], et entée[j],​sortie[k] =0 si j différent de k Matrice ou la sortie est idéale: le 1 correspond à entée[i] = sortie[i], et entée[j],​sortie[k] =0 si j différent de k
  
Ligne 66: Ligne 103:
 X = Xavier = prénom X = Xavier = prénom
   * **[[http://​deepdish.io/​2015/​02/​24/​network-initialization/​|Initialization of deep networks]]**   * **[[http://​deepdish.io/​2015/​02/​24/​network-initialization/​|Initialization of deep networks]]**
 +
 ===== Réseau de neurones Perceptron multicouches ​ ===== ===== Réseau de neurones Perceptron multicouches ​ =====
-  * **[[https://​fr.wikipedia.org/​wiki/​Perceptron_multicouche|Perceptron multicouche]]+  * **[[https://​fr.wikipedia.org/​wiki/​Perceptron_multicouche|Perceptron multicouche]]** 
 +Un réseau de neurones Perceptron multicouches est un type de réseau dont l'​information circule dans un unique sens, de la couche d'​entrée vers la couche de sortie. Ont dit qu'il est un réseau "à propagation directe"​ (feedforward). 
  
-Un réseau de neurones ​Perceptron multicouches ​est un type de réseau de neurones artificiels dans lequel le motif de connexion entre les neurones est inspiré par le cortex visuel des animaux.+===== Réseau de neurones Convolutif ===== 
 +  * **[[https://​fr.wikipedia.org/​wiki/​R%C3%A9seau_neuronal_convolutif|Réseau neuronal convolutif]]** 
 +Un réseau de neurones ​Convolutif ​est un type de réseau de neurones artificiels dans lequel le motif de connexion entre les neurones est inspiré par le cortex visuel des animaux. Actuellement,​ il est très utilisé pour l'​analyse des images, des vidéos et du langage naturel.
  
 +Ce type de réseau est développé avec [[yolo_avec_mes_propres_images|Yolo Darknet Préparation de mes propres images]] puis [[yolo_sans_carte_graphique|Yolo Darknet sans carte graphique]] et enfin [[yolo_darknet_sur_un_portable_optimus|Yolo Darknet sur un portable Optimus]].
  
-=====Du code expliqué avec beaucoup d'​amour=====+=====Réseau de neurones Perceptron multicouches en python===== 
 +**Du code expliqué avec beaucoup d'​amour**
 Enfin, là c'est de l'​intelligence qu'on cherche, pas de l'​amour. Enfin, là c'est de l'​intelligence qu'on cherche, pas de l'​amour.
  
-La totalité du projet est à **[[https://​github.com/​sergeLabo/​semaphore|Semaphore]]** sur Github, et  **[[jeu_du_semaphore_dans_le_blender_game_engine|Jeu du sémaphore dans le Blender Game Engine]]**+====Notre réseau==== 
 + **Une colonne de 1600 en entrée, 2 nodes de 100, une sortie de 27 caractères.**
  
-<code python>+{{ media_01:​perceptron.svg.png?​1000 |}} 
 + 
 +La totalité du projet est à **[[https://​github.com/​sergeLabo/​semaphore|Semaphore]]** sur Github, et  **[[jeu_du_semaphore_dans_le_blender_game_engine|Jeu du sémaphore dans le Blender Game Engine]]** pour la création des images. 
 + 
 +====Installation==== 
 +Installation de pip3: 
 +  sudo apt install pip3 
 +Installation de numpy et opencv 
 +  sudo pip3 install opencv numpy 
 +Il faut installer mon [[pymultilame|module python perso]] disponible sur Github 
 +  sudo pip3 install -e git+https://​github.com/​sergeLabo/​pymultilame.git#​egg=pymultilame 
 +   
 +====Le script==== 
 +<file python ​ia.py>
 #​!/​usr/​bin/​env python3 #​!/​usr/​bin/​env python3
 # -*- coding: UTF-8 -*- # -*- coding: UTF-8 -*-
Ligne 122: Ligne 180:
  
     def training(self):​     def training(self):​
-        """​Apprentissage avec 60 000 images. Poids enregistré dans weights.npy"""​+        """​Apprentissage avec 50 000 images. Poids enregistré dans weights.npy"""​
         print("​Training..."​)         print("​Training..."​)
  
Ligne 136: Ligne 194:
         # Initialisation des poids des nodes, pour ne pas à être à 0         # Initialisation des poids des nodes, pour ne pas à être à 0
         # Construit 3 matrices (100x1600, 100x100, 27x100)         # Construit 3 matrices (100x1600, 100x100, 27x100)
-        # /np.sqrt() résultat expérimental de l'​initialisation ​de Glorot He Xavier+        # /np.sqrt() résultat expérimental de l'​initialisation ​d'un gars qui s'​appelle Xavier ​Glorot ​et d'un autre qui s'​appelle ​He !
         weight_list = [np.random.randn(self.layers[k+1],​ self.layers[k]) / \         weight_list = [np.random.randn(self.layers[k+1],​ self.layers[k]) / \
                        ​np.sqrt(self.layers[k]) for k in range(len(self.layers)-1)]                        ​np.sqrt(self.layers[k]) for k in range(len(self.layers)-1)]
Ligne 146: Ligne 204:
  
             # Affichage pour distraire les mangalore             # Affichage pour distraire les mangalore
-            # TODO: mettre ça dans un truc à l'ext de cette méthode 
             if i % 10000 == 0:             if i % 10000 == 0:
                 print(i, nombre_lettre)                 print(i, nombre_lettre)
Ligne 165: Ligne 222:
  
                 # self.activations = non linéaire sinon sortie fonction linéaire de l'​entrée                 # self.activations = non linéaire sinon sortie fonction linéaire de l'​entrée
-                # imite le seuil d'​activation électrique du neuronne+                # imite le seuil d'​activation électrique du neurone
                 vecteur_colonne = self.activations[k](z)                 vecteur_colonne = self.activations[k](z)
  
Ligne 172: Ligne 229:
             # Retro propagation,​ delta_a = écart entre la sortie réelle et attendue             # Retro propagation,​ delta_a = écart entre la sortie réelle et attendue
             delta_a = vecteur_colonne - diagonale[:,​[nombre_lettre]]             delta_a = vecteur_colonne - diagonale[:,​[nombre_lettre]]
-            # Parcours des nodes en sens inverse pour corriger ​proportionnellemnt+            # Parcours des nodes en sens inverse pour corriger ​proportionnellement
             # les poids en fonction de l'​erreur par rapport à la valeur souhaitée             # les poids en fonction de l'​erreur par rapport à la valeur souhaitée
             # Descente du Gradient stochastique             # Descente du Gradient stochastique
Ligne 211: Ligne 268:
                 success += 1                 success += 1
             else:             else:
-                # TODO: mettre ça dans un truc à l'ext de cette méthode 
                 if self.failed:​                 if self.failed:​
                     self.write_failed(img,​ nombre_lettre,​ reconnu, success)                     self.write_failed(img,​ nombre_lettre,​ reconnu, success)
Ligne 246: Ligne 302:
  
     for i in range(5):     for i in range(5):
-        print("​Petit test de l'​influence du random dans la liste des poids"​) 
         learningrate = 0.022         learningrate = 0.022
         failed = 0         failed = 0
Ligne 253: Ligne 308:
         resp = sia.testing()         resp = sia.testing()
         print("​Learningrate:​ {} Résultat {}"​.format(learningrate,​ round(resp, 1)))         print("​Learningrate:​ {} Résultat {}"​.format(learningrate,​ round(resp, 1)))
 +</​file> ​   ​
 +
 +=====La même chose avec Cupy ou Tensorflow=====
 +  * **[[cupy_vs_numpy|Cupy:​ calcul numpy avec CUDA]]**
 +  * **[[le_semaphore_avec_tensorflow|Le sémaphore avec TensorFlow]]**
  
-</​code> ​   ​+===== Etape suivante: YOLO Darknet===== 
 +**[[computer_vision_and_pattern_recognition_segmentation_d_image|Computer Vision and Pattern Recognition Mask R-CNN]]**
  
-{{tag>​ia ​semaphore ​sb}}+{{tag> ​bge ia python ​sb semaphore ​}}
  
l_intelligence_du_semaphore.1549640767.txt.gz · Dernière modification: 2019/02/08 16:46 par serge