Cet article est un article de mémoire destiné aux élèves du primaire qui étudient par eux-mêmes le python, l'apprentissage automatique, etc. «Ce sera extrêmement simple,« étudiez en copiant le code qui vous intéresse ». ――Nous vous serions reconnaissants si vous pouviez nous donner des commentaires constructifs (si vous l'aimez, veuillez LGTM et stockez-le).
Le sujet d'aujourd'hui est une vidéo sur Youtube appelée Classify_images_Using_Python & Machine Learning. C'est comme apprendre des images de chiens et de chats et les juger.
Classify Images Using Python & Machine Learning
L'analyse a utilisé Google Colaboratry, comme le montre la vidéo youtube.
Alors j'aimerais le faire.
import tensorflow as tf
from tensorflow import keras
from keras.models import Sequential
from keras.layers import Dense, Flatten, Conv2D, MaxPool2D, Dropout
from tensorflow.keras import layers
from keras.utils import to_categorical
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('fivethirtyeight')
prochain
Je vais faire jusqu'à.
#1
from keras.datasets import cifar10
(x_train, x_test), (y_train, y_test) = cifar10.load_data()
#2
print(type(x_train))
print(type(y_train))
print(type(x_test))
print(type(y_test))
#3
print('x_train shape:', x_train.shape)
print('y_train shape:', y_train.shape)
print('x_test shape:', x_test.shape)
print('y_test shape:', y_test.shape)
#4
index = 10
x_train[index]
#5
img = plt.imshow(x_train[index])
Je peux voir l'image. Ensuite, regardons l'étiquette associée à cette image.
print('The image label is:', x_train[index])
Si vous regardez ceci, vous pouvez voir qu'il est étiqueté «4». Ensuite, cet ensemble de données contient 10 images différentes.
# Get the image classification
classification = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']
# Print the image class
print('The image class is:', classification[y_train[index][0]])
Du coup, il semble que ce soit l'image d'un "cerf" (même si vous vous approchez souvent de l'écran, c'est difficile ...).
Ensuite, définissez la variable expliquée y sur ʻone_hot_encoding`, et attribuez un nombre de 0 ou 1 (1 si correct, 0 sinon) afin que l'étiquette d'image puisse être placée dans le réseau neuronal.
y_train_one_hot = to_categorical(y_train)
y_test_one_hot = to_categorical(y_test)
print(y_train_one_hot)
print('The one hot label is:', y_train_one_hot[index])
Puis standardisez l'ensemble de données (0-1).
x_train = x_train / 255
x_test = x_test / 255
x_train[index]
Il s'agit de la fin du traitement. Ensuite, construisons un modèle CNN!
model = Sequential()
model.add( Conv2D(32, (5,5), activation='relu', input_shape=(32,32,3)))
model.add(MaxPool2D(pool_size=(2,2)))
model.add( Conv2D(32, (5,5), activation='relu'))
model.add(MaxPool2D(pool_size=(2,2)))
model.add(Flatten())
model.add(Dense(1000, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(500, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(250, activation='relu'))
model.add(Dense(10, activation='softmax'))
Ensuite, compilez le modèle et entraînez-le.
model.compile(loss= 'categorical_crossentropy',
optimizer= 'adam',
metrics= ['accuracy'])
hist = model.fit(x_train, y_train_one_hot,
batch_size = 256,
epochs = 10,
validation_split = 0.2)
Testez le modèle terminé avec les données de test.
model.evaluate(x_test, y_test_one_hot)[1]
>> 0.6811000108718872
Eh bien, c'était la même chose dans la vidéo, mais le résultat n'est pas si bon. .. ..
Pour le moment, dessinez l'erreur de précision et de perte avec matplotlib.
# Visualize the model accuracy
plt.plot(hist.history['accuracy'])
plt.plot(hist.history['val_accuracy'])
plt.title('Model accuracy')
plt.ylabel('Accuracy')
plt.xlabel('Epoch')
plt.legend(['Train', 'Val'], loc='upper left')
plt.show()
#Visualize the models loss
plt.plot(hist.history['loss'])
plt.plot(hist.history['val_loss'])
plt.title('Model loss')
plt.ylabel('Loss')
plt.xlabel('Epoch')
plt.legend(['Train', 'Val'], loc='upper right')
plt.show()
Enfin, faisons une prédiction avec un modèle en utilisant une image appropriée (cette fois l'image d'un chat).
# Test the model with an example
from google.colab import files
uploaded = files.upload()
# show the image
new_image = plt.imread('cat-xxxxx.jpeg')
img = plt.imshow(new_image)
# Resize the image
from skimage.transform import resize
resized_image = resize(new_image, (32,32,3))
img = plt.imshow(resized_image)
# Get the models predictions
predictions = model.predict(np.array([resized_image]))
# Show the predictions
predictions
# Sort the predictions from least to greatest
list_index = [0,1,2,3,4,5,6,7,8,9]
x = predictions
for i in range(10):
for j in range(10):
if x[0][list_index[i]] > x[0][list_index[j]]:
temp = list_index[i]
list_index[i] = list_index[j]
list_index[j] = temp
# Show the sorted labels in order
print(list_index)
# Print the first 5 predictions
for i in range(5):
print(classification[list_index[i]], ':', round(predictions[0][list_index[i]] * 100, 2), '%')
Le résultat est,
cat : 51.09 % dog : 48.73 % deer : 0.06 % bird : 0.04 % frog : 0.04 %
Je ne pouvais pas juger s'il s'agissait d'un chat ou d'un chien (rires) La précision du modèle n'était pas bonne et l'image utilisée n'était pas bonne.
Cette fois, j'ai étudié le jugement d'image en utilisant le tensorflow et les keras. Bien sûr, je suis conscient que ce n'est pas assez précis pour être utilisé, mais je pense que c'était un bon tremplin.
Merci pour votre soutien continu.
(Apprendre jusqu'à présent)
Recommended Posts