Si vous arrivez soudainement à cette page, veuillez vous référer à la Page parente
.
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.
Lancez pycharm (PyCharm Community Edition) pour créer un programme Python. Puisque le PJ créé la dernière fois est affiché, cliquez sur " mnist
"
Écran de démarrage de pycharm (le projet mnist a été démarré)
Le code source de cet exemple n'a rien à voir avec l'IA, donc supprimez-le tout (le code source de l'exemple peut être facilement supprimé avec «CTL + A» et «touche DEL»).
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()
copier
ce code source dans le champ précédent (à l'intérieur du cadre rouge).
--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.
Vous pouvez également vérifier les bibliothèques manquantes dans le code source. Lorsqu'il n'y a pas de bibliothèque dans le code source, il est souligné en rouge.
Les bibliothèques manquantes sont résumées ci-dessous. La bibliothèque est incluse dans le package. Notez que seule la bibliothèque sklearn est incluse dans un package appelé scikit-learn.
No. | Nom de bibliothèque manquant | Nom du package requis |
---|---|---|
1 | keras | keras |
2 | numpy | numpy |
3 | matplotlib | matplotlib |
4 | sklearn | scikit-learn |
● Ajouter un package depuis anaconda
] -> [
python37`]● Installez le package keras
] par [ʻAll
]keras
] dans la zone de recherche pour rechercher les paquets keraskeras
] sur ON--Lorsque la boîte de message Install Packages apparaît, cliquez sur [ʻApply`] pour installer le package keras.
● Installez le package numpy
numpy
] dans la zone de recherche pour rechercher des packages numpyPuisque 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.
● Installez le package matplotlib
matplotlib
] dans la zone de recherche pour rechercher le paquet matplotlib.matplotlib
] sur ON● Installez le package scikit-learn
scikit-learn
] dans la zone de recherche pour rechercher le paquet scikit-learn.scikit-learn
] sur ON--Confirmez que toutes les erreurs ont disparu.
Problems
]
--Cliquez sur "▶
" en haut à droite pour exécuter le programme.
――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
――Vous pouvez voir que le taux de réponse correcte augmente régulièrement à mesure que le nombre d'apprentissage augmente.
――Vous pouvez voir que le taux de perte diminue régulièrement à mesure que le nombre d'apprentissage augmente.
――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.
Recommended Posts