3. 3. Programmation IA avec Python

introduction

Si vous arrivez soudainement à cette page, veuillez vous référer à la Page parente.

But ici

Utilisez pycharm pour coder l'IA en langage python. Vous pouvez copier et coller le code. Vous pouvez le faire même si vous ne comprenez pas la signification dans le code source.

Lancement de l'environnement de développement

Programmation IA avec Python

main.py


# ------------------------------------------------------------------------------------------------------------
# CNN(Convolutional Neural Network)Essayez MNIST avec
# ------------------------------------------------------------------------------------------------------------
import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix
from keras.datasets import mnist
from keras import backend as ke
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D


# ------------------------------------------------------------------------------------------------------------
#Hyper paramètres
# ------------------------------------------------------------------------------------------------------------
#Hyper paramètres ⇒ Taille du lot, nombre d'époques
#Par exemple, les données d'entraînement sont de 60,Avec 000 pièces, lot_taille 6,Si c'est 000,
#60 pour utiliser toutes les données d'entraînement,000 pièces ÷ 6,000 = 10 mises à jour des paramètres sont effectuées.
#Cela s'appelle 1 époque. Si l'époque est 10, le paramètre est mis à jour 10 × 10 = 100 fois.
#le numéro d'époque est une fonction de perte(Fonction de coût)Réglez jusqu'à ce que la valeur de soit presque convergente.
batch_size = 6000           #Taille du lot
epochs = 5                  #Nombre d'époques


# ------------------------------------------------------------------------------------------------------------
#Fonction de table correcte / incorrecte
# ------------------------------------------------------------------------------------------------------------
def show_prediction():
    n_show = 100                                 #Il est difficile de tout afficher, alors affichez
    y = model.predict(X_test)
    plt.figure(2, figsize=(10, 10))
    plt.gray()
    for i in range(n_show):
        plt.subplot(10, 10, (i+1))               # subplot(Nombre de lignes,Le nombre de colonnes,Numéro de parcelle)
        x = X_test[i, :]
        x = x.reshape(28, 28)
        plt.pcolor(1 - x)
        wk = y[i, :]
        prediction = np.argmax(wk)
        plt.text(22, 25.5, "%d" % prediction, fontsize=12)
        if prediction != np.argmax(y_test[i, :]):
            plt.plot([0, 27], [1, 1], color='red', linewidth=10)
        plt.xlim(0, 27)
        plt.ylim(27, 0)
        plt.xticks([], "")
        plt.yticks([], "")


# ------------------------------------------------------------------------------------------------------------
#Affichage du backend Keras
# ------------------------------------------------------------------------------------------------------------
# print(ke.backend())
# print(ke.floatx())


# ------------------------------------------------------------------------------------------------------------
#Acquisition des données MNIST
# ------------------------------------------------------------------------------------------------------------
#Cela prend du temps car le téléchargement a lieu la première fois
# 60,10 images en noir et blanc de 10 nombres représentés par 000 28x28 points et 10,000 jeu de données d'images de test
#Emplacement de téléchargement:'~/.keras/datasets/'
#* Si le téléchargement des données MNIST est NG, vérifiez les paramètres PROXY.
#
#Données MNIST
#├ Données enseignants(60,000 pièces)
#│ ├ Données d'image
#│ └ Données d'étiquette
#  │
#└ Données de vérification(10,000 pièces)
#├ Données d'image
#└ Données d'étiquette

#↓ Données de l'enseignant ↓ Données de vérification
(X_train, y_train), (X_test, y_test) = mnist.load_data()
#↑ Image ↑ Étiquette ↑ Image ↑ Étiquette


# ------------------------------------------------------------------------------------------------------------
#données d'image(Données de l'enseignant, données de vérification)Remodeler
# ------------------------------------------------------------------------------------------------------------
img_rows, img_cols = 28, 28
if ke.image_data_format() == 'channels_last':
    X_train = X_train.reshape(X_train.shape[0], img_rows, img_cols, 1)
    X_test = X_test.reshape(X_test.shape[0], img_rows, img_cols, 1)
    input_shape = (img_rows, img_cols, 1)
else:
    X_train = X_train.reshape(X_train.shape[0], 1, img_rows, img_cols)
    X_test = X_test.reshape(X_test.shape[0], 1, img_rows, img_cols)
    input_shape = (1, img_rows, img_cols)

#Formatage du tableau et conversion de la gamme de couleurs de 0 à 255 en 0 en 1
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
X_train /= 255
X_test /= 255


# ------------------------------------------------------------------------------------------------------------
#Données d'étiquette(Données de l'enseignant, données de vérification)Vectorisation de
# ------------------------------------------------------------------------------------------------------------
y_train = np_utils.to_categorical(y_train)      #Vectorisation des étiquettes des enseignants
y_test = np_utils.to_categorical(y_test)        #Vectorisation des étiquettes de validation


# ------------------------------------------------------------------------------------------------------------
#Définition du réseau(keras)
# ------------------------------------------------------------------------------------------------------------
print("")
print("● Définition du réseau")
model = Sequential()

#Couche d'entrée 28 × 28 × 3
model.add(Conv2D(16, kernel_size=(3, 3), activation='relu', input_shape=input_shape, padding='same'))     #01 couche: 16 couches de pliage
model.add(Conv2D(32, (3, 3), activation='relu', padding='same'))                                          #02 couche: 32 couches de pliage
model.add(MaxPooling2D(pool_size=(2, 2)))                                                                 #03 couche: couche de pooling
model.add(Dropout(0.25))                                                                                  #Couche 04: abandon
model.add(Conv2D(32, (3, 3), activation='relu', padding='same'))                                          #05 couche: 64 couches de pliage
model.add(MaxPooling2D(pool_size=(2, 2)))                                                                 #06 couche: couche de pooling
model.add(Flatten())                                                                                      #08 couche: conversion de dimension
model.add(Dense(128, activation='relu'))                                                                  #09 couche: sortie entièrement combinée 128
model.add(Dense(10, activation='softmax'))                                                                #10 couches: sortie entièrement couplée 10

#affichage du modèle
model.summary()

#compiler
#Fonction de perte: catégorique_crossentropy (Entropie croisée)
#Optimisation: Adam
model.compile(loss='categorical_crossentropy',
              optimizer='Adam',
              metrics=['accuracy'])

print("")
print("● Commencez à apprendre")
f_verbose = 1  # 0:Pas d'affichage, 1: affichage détaillé, 2: affichage
hist = model.fit(X_train, y_train,
                 batch_size=batch_size,
                 epochs=epochs,
                 validation_data=(X_test, y_test),
                 verbose=f_verbose)


# ------------------------------------------------------------------------------------------------------------
#Représentation graphique de la valeur de perte
# ------------------------------------------------------------------------------------------------------------
# Accuracy (Taux de réponse correct)
plt.plot(range(epochs), hist.history['accuracy'], marker='.')
plt.plot(range(epochs), hist.history['val_accuracy'], marker='.')
plt.title('Accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='lower right')
plt.show()

# loss (Fonction de perte)
plt.plot(range(epochs), hist.history['loss'], marker='.')
plt.plot(range(epochs), hist.history['val_loss'], marker='.')
plt.title('loss Function')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper right')
plt.show()


# ------------------------------------------------------------------------------------------------------------
#Validation des données de test
# ------------------------------------------------------------------------------------------------------------
print("")
print("● Résultat de la vérification")
t_verbose = 1  # 0:Pas d'affichage, 1: affichage détaillé, 2: affichage
score = model.evaluate(X_test, y_test, verbose=t_verbose)

print("")
print("batch_size = ", batch_size)
print("epochs = ", epochs)

print('Test loss:', score[0])
print('Test accuracy:', score[1])


print("")
print("● Matrice de confusion(Matrice de confusion)Horizontal: résultat de l'identification, vertical: données de réponse correctes")
predict_classes = model.predict_classes(X_test[1:60000, ], batch_size=batch_size)
true_classes = np.argmax(y_test[1:60000], 1)
print(confusion_matrix(true_classes, predict_classes))


# ------------------------------------------------------------------------------------------------------------
#Affichage correct / incorrect du tableau
# ------------------------------------------------------------------------------------------------------------
show_prediction()
plt.show()

--Cliquez sur [Probrems] sur l'onglet dans le volet inférieur pour vérifier le contenu. Dans le cadre de la ligne rouge comme indiqué ci-dessous ! S'il y a un cercle rouge , la bibliothèque est insuffisante et une erreur s'est produite. prog009.png

prog001+.png

No. Nom de bibliothèque manquant Nom du package requis
1 keras keras
2 numpy numpy
3 matplotlib matplotlib
4 sklearn scikit-learn

Installation du package

● Ajouter un package depuis anaconda

  1. Démarrez anaconda et cliquez sur [ʻEnvionments] -> [python37`]

● Installez le package keras

  1. Remplacez [ʻInstalled] par [ʻAll]
  2. Entrez [keras] dans la zone de recherche pour rechercher les paquets keras
  3. Cochez la case [keras] sur ON
  4. Cliquez sur [ʻApply`] en bas à droite pour adapter prog003.png

--Lorsque la boîte de message Install Packages apparaît, cliquez sur [ʻApply`] pour installer le package keras. prog004.png

● Installez le package numpy

  1. Entrez [numpy] dans la zone de recherche pour rechercher des packages numpy
  2. J'ai pu confirmer que le package numpy était installé.

Puisque keras utilise numpy, numpy a été automatiquement installé lorsque le package keras a été installé en raison de la dépendance. Ainsi, j'ai pu omettre le travail d'installation de numpy. prog005.png

● Installez le package matplotlib

prog006.png

  1. Entrez [matplotlib] dans la zone de recherche pour rechercher le paquet matplotlib.
  2. Cochez la case [matplotlib] sur ON
  3. Cliquez sur [ʻApply`] en bas à droite pour adapter
  4. Lorsque la boîte de message Installer les packages apparaît, cliquez sur [ʻApply`] pour installer le package matplotlib.

● Installez le package scikit-learn

  1. Entrez [scikit-learn] dans la zone de recherche pour rechercher le paquet scikit-learn.
  2. Cochez la case [scikit-learn] sur ON
  3. Cliquez sur [ʻApply`] en bas à droite pour adapter
  4. Lorsque la boîte de message Install Packages apparaît, cliquez sur [ʻApply`] pour installer le package scicit-learn.

Exécution du programme

--Confirmez que toutes les erreurs ont disparu.

  1. Cliquez sur [Problems]
  2. Confirmez que «! Cercle rouge» n'apparaît pas dans Problèmes

prog009.png prog010.png

--Cliquez sur "" en haut à droite pour exécuter le programme. prog011.png

Résultat de sortie

――Si vous pouvez le faire correctement, vous obtiendrez les résultats suivants. --Cette fois, le résultat était "Exactitude du test: 0,9359999895095825", donc le taux de reconnaissance était de 93,4%.

C:\Users\xxxx\anaconda3\envs\python37\python.exe C:/Users/xxxx/PycharmProjects/mnist_sample/qiita.py
Using TensorFlow backend.

● Définition du réseau
2020-08-06 11:36:11.346263: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2
Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_1 (Conv2D)            (None, 28, 28, 16)        160       
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 28, 28, 32)        4640      
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 14, 14, 32)        0         
_________________________________________________________________
dropout_1 (Dropout)          (None, 14, 14, 32)        0         
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 14, 14, 32)        9248      
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 7, 7, 32)          0         
_________________________________________________________________
flatten_1 (Flatten)          (None, 1568)              0         
_________________________________________________________________
dense_1 (Dense)              (None, 128)               200832    
_________________________________________________________________
dense_2 (Dense)              (None, 10)                1290      
=================================================================
Total params: 216,170
Trainable params: 216,170
Non-trainable params: 0
_________________________________________________________________

● Commencez à apprendre
Train on 60000 samples, validate on 10000 samples
Epoch 1/5
2020-08-06 11:36:12.480915: W tensorflow/core/framework/cpu_allocator_impl.cc:81] Allocation of 602112000 exceeds 10% of system memory.
2020-08-06 11:36:14.075159: W tensorflow/core/framework/cpu_allocator_impl.cc:81] Allocation of 602112000 exceeds 10% of system memory.

 6000/60000 [==>...........................] - ETA: 36s - loss: 2.3063 - accuracy: 0.0653
12000/60000 [=====>........................] - ETA: 32s - loss: 2.2858 - accuracy: 0.1563
18000/60000 [========>.....................] - ETA: 29s - loss: 2.2630 - accuracy: 0.2346
24000/60000 [===========>..................] - ETA: 24s - loss: 2.2374 - accuracy: 0.2971
30000/60000 [==============>...............] - ETA: 20s - loss: 2.2083 - accuracy: 0.3415
36000/60000 [=================>............] - ETA: 16s - loss: 2.1742 - accuracy: 0.3779
42000/60000 [====================>.........] - ETA: 12s - loss: 2.1342 - accuracy: 0.4095
48000/60000 [=======================>......] - ETA: 8s - loss: 2.0883 - accuracy: 0.4363 
54000/60000 [==========================>...] - ETA: 4s - loss: 2.0373 - accuracy: 0.4610
60000/60000 [==============================] - 44s 733us/step - loss: 1.9787 - accuracy: 0.4864 - val_loss: 1.3384 - val_accuracy: 0.7674
Epoch 2/5

 6000/60000 [==>...........................] - ETA: 39s - loss: 1.3002 - accuracy: 0.7305
12000/60000 [=====>........................] - ETA: 37s - loss: 1.2238 - accuracy: 0.7381
18000/60000 [========>.....................] - ETA: 33s - loss: 1.1505 - accuracy: 0.7432
24000/60000 [===========>..................] - ETA: 27s - loss: 1.0788 - accuracy: 0.7513
30000/60000 [==============>...............] - ETA: 23s - loss: 1.0145 - accuracy: 0.7597
36000/60000 [=================>............] - ETA: 18s - loss: 0.9617 - accuracy: 0.7652
42000/60000 [====================>.........] - ETA: 14s - loss: 0.9165 - accuracy: 0.7698
48000/60000 [=======================>......] - ETA: 9s - loss: 0.8742 - accuracy: 0.7754 
54000/60000 [==========================>...] - ETA: 4s - loss: 0.8390 - accuracy: 0.7804
60000/60000 [==============================] - 50s 831us/step - loss: 0.8084 - accuracy: 0.7856 - val_loss: 0.4861 - val_accuracy: 0.8541
Epoch 3/5

 6000/60000 [==>...........................] - ETA: 41s - loss: 0.4924 - accuracy: 0.8445
12000/60000 [=====>........................] - ETA: 36s - loss: 0.4970 - accuracy: 0.8453
18000/60000 [========>.....................] - ETA: 32s - loss: 0.5020 - accuracy: 0.8486
24000/60000 [===========>..................] - ETA: 28s - loss: 0.5005 - accuracy: 0.8508
30000/60000 [==============>...............] - ETA: 23s - loss: 0.4866 - accuracy: 0.8547
36000/60000 [=================>............] - ETA: 19s - loss: 0.4774 - accuracy: 0.8578
42000/60000 [====================>.........] - ETA: 14s - loss: 0.4730 - accuracy: 0.8603
48000/60000 [=======================>......] - ETA: 9s - loss: 0.4721 - accuracy: 0.8622 
54000/60000 [==========================>...] - ETA: 4s - loss: 0.4641 - accuracy: 0.8648
60000/60000 [==============================] - 52s 862us/step - loss: 0.4574 - accuracy: 0.8666 - val_loss: 0.3624 - val_accuracy: 0.9004
Epoch 4/5

 6000/60000 [==>...........................] - ETA: 44s - loss: 0.3941 - accuracy: 0.8850
12000/60000 [=====>........................] - ETA: 40s - loss: 0.3863 - accuracy: 0.8882
18000/60000 [========>.....................] - ETA: 34s - loss: 0.3731 - accuracy: 0.8912
24000/60000 [===========>..................] - ETA: 29s - loss: 0.3659 - accuracy: 0.8943
30000/60000 [==============>...............] - ETA: 25s - loss: 0.3545 - accuracy: 0.8971
36000/60000 [=================>............] - ETA: 20s - loss: 0.3461 - accuracy: 0.8987
42000/60000 [====================>.........] - ETA: 15s - loss: 0.3417 - accuracy: 0.9001
48000/60000 [=======================>......] - ETA: 10s - loss: 0.3421 - accuracy: 0.9008
54000/60000 [==========================>...] - ETA: 5s - loss: 0.3367 - accuracy: 0.9023 
60000/60000 [==============================] - 52s 874us/step - loss: 0.3332 - accuracy: 0.9033 - val_loss: 0.2740 - val_accuracy: 0.9225
Epoch 5/5

 6000/60000 [==>...........................] - ETA: 44s - loss: 0.2830 - accuracy: 0.9168
12000/60000 [=====>........................] - ETA: 39s - loss: 0.2939 - accuracy: 0.9151
18000/60000 [========>.....................] - ETA: 35s - loss: 0.2872 - accuracy: 0.9168
24000/60000 [===========>..................] - ETA: 30s - loss: 0.2782 - accuracy: 0.9193
30000/60000 [==============>...............] - ETA: 25s - loss: 0.2782 - accuracy: 0.9188
36000/60000 [=================>............] - ETA: 20s - loss: 0.2733 - accuracy: 0.9200
42000/60000 [====================>.........] - ETA: 15s - loss: 0.2686 - accuracy: 0.9217
48000/60000 [=======================>......] - ETA: 10s - loss: 0.2684 - accuracy: 0.9222
54000/60000 [==========================>...] - ETA: 4s - loss: 0.2654 - accuracy: 0.9233 
60000/60000 [==============================] - 52s 872us/step - loss: 0.2634 - accuracy: 0.9236 - val_loss: 0.2180 - val_accuracy: 0.9360

● Résultat de la vérification

   32/10000 [..............................] - ETA: 5s
  320/10000 [..............................] - ETA: 2s
  608/10000 [>.............................] - ETA: 2s
  928/10000 [=>............................] - ETA: 1s
 1248/10000 [==>...........................] - ETA: 1s
 1568/10000 [===>..........................] - ETA: 1s
 1920/10000 [====>.........................] - ETA: 1s
 2272/10000 [=====>........................] - ETA: 1s
 2624/10000 [======>.......................] - ETA: 1s
 2976/10000 [=======>......................] - ETA: 1s
 3328/10000 [========>.....................] - ETA: 1s
 3680/10000 [==========>...................] - ETA: 1s
 4032/10000 [===========>..................] - ETA: 1s
 4384/10000 [============>.................] - ETA: 1s
 4736/10000 [=============>................] - ETA: 0s
 5088/10000 [==============>...............] - ETA: 0s
 5408/10000 [===============>..............] - ETA: 0s
 5728/10000 [================>.............] - ETA: 0s
 6048/10000 [=================>............] - ETA: 0s
 6368/10000 [==================>...........] - ETA: 0s
 6560/10000 [==================>...........] - ETA: 0s
 6816/10000 [===================>..........] - ETA: 0s
 7104/10000 [====================>.........] - ETA: 0s
 7392/10000 [=====================>........] - ETA: 0s
 7680/10000 [======================>.......] - ETA: 0s
 8000/10000 [=======================>......] - ETA: 0s
 8320/10000 [=======================>......] - ETA: 0s
 8640/10000 [========================>.....] - ETA: 0s
 8960/10000 [=========================>....] - ETA: 0s
 9280/10000 [==========================>...] - ETA: 0s
 9600/10000 [===========================>..] - ETA: 0s
 9920/10000 [============================>.] - ETA: 0s
10000/10000 [==============================] - 2s 196us/step

batch_size =  6000
epochs =  5
Test loss: 0.21799209741055967
Test accuracy: 0.9359999895095825

● Matrice de confusion(Matrice de confusion)Horizontal: résultat de l'identification, vertical: données de réponse correctes
[[ 966    0    1    1    0    1    6    1    4    0]
 [   0 1108    4    2    0    0    3    1   17    0]
 [  12    2  954   18    7    0    7    8   21    3]
 [   2    2    7  938    0   24    0   11   19    7]
 [   1    2    4    1  908    0   10    3    5   48]
 [   5    1    3   18    0  834    9    2   14    6]
 [  18    4    2    2    6   14  906    2    4    0]
 [   1    5   26    7    7    1    0  916    4   60]
 [  10    0    5   23    9   18    8    4  878   19]
 [  10    5    3   13    8    6    0    7    6  951]]

Process finished with exit code 0

Taux de réponse correct

――Vous pouvez voir que le taux de réponse correcte augmente régulièrement à mesure que le nombre d'apprentissage augmente. exe001.PNG

Résultat de la fonction de perte

――Vous pouvez voir que le taux de perte diminue régulièrement à mesure que le nombre d'apprentissage augmente. exe002.PNG

errata

――Il y a 10 000 données de vérification, mais il est difficile de toutes les sortir, nous produisons donc les résultats jusqu'aux 100 premiers. ―― Celui indiqué par la ligne rouge est celui qui a causé une erreur de reconnaissance par AI.

c'est tout

Recommended Posts

3. 3. Programmation IA avec Python
Programmation Python avec Atom
Programmation compétitive avec python
Programmation avec Python Flask
Programmation avec Python et Tkinter
Créez Puyopuyo AI avec Python
Programmation réseau avec Python Scapy
[Python] Programmation orientée objet apprise avec Pokemon
Programmation facile Python + OpenCV avec Canopy
FizzBuzz en Python3
Note de programmation Python
Grattage avec Python
Statistiques avec python
Grattage avec Python
Python avec Go
Twilio avec Python
Intégrer avec Python
Jouez avec 2016-Python
AES256 avec python
Testé avec Python
Programmation avec Python
python commence par ()
avec syntaxe (Python)
Bingo avec python
Zundokokiyoshi avec python
Excel avec Python
Micro-ordinateur avec Python
Cast avec python
Programmation de compétition avec les paramètres de l'environnement local python
[Épisode 3] Les débutants ont essayé Numeron AI avec python
"Programmation Python AI" à partir de 0 pour Windows
[Épisode 0] Un débutant a essayé Numeron AI avec python
[Épisode 1] Un débutant a essayé Numeron AI avec python
Construction d'environnement AI / Machine Learning avec Python
Communication série avec Python
Zip, décompressez avec python
Django 1.11 a démarré avec Python3.6
Jugement des nombres premiers avec Python
Communication de socket avec Python
Analyse de données avec python 2
Essayez de gratter avec Python.
Programmation asynchrone avec libev # 2
Apprendre Python avec ChemTHEATER 03
Recherche séquentielle avec Python
"Orienté objet" appris avec python
Comment profiter de la programmation avec Minecraft (Ruby, Python)
Exécutez Python avec VBA
Manipuler yaml avec python
Résolvez AtCoder 167 avec python
Communication série avec python
[Python] Utiliser JSON avec Python
Apprendre Python avec ChemTHEATER 05-1
Exécutez prepDE.py avec python3
1.1 Premiers pas avec Python
Collecter des tweets avec Python
Binarisation avec OpenCV / Python
Méthode Kernel avec Python
Non bloquant avec Python + uWSGI
Grattage avec Python + PhantomJS
[Dernière histoire] Un débutant a essayé Numeron AI avec python