――Dieser Artikel ist ein Memorandum-Artikel für Grundschüler, die selbst Python, maschinelles Lernen usw. lernen. ――Es wird sehr einfach sein: "Studieren Sie, während Sie den Code kopieren, an dem Sie interessiert sind". ――Wir würden uns über Ihre konstruktiven Kommentare freuen (LGTM & Lager, wenn Sie es mögen).
Das heutige Thema ist ein Video auf Youtube mit dem Titel Classify_images_Using_Python & Machine Learning. Es ist, als würde man Bilder von Hunden und Katzen lernen und sie beurteilen.
Classify Images Using Python & Machine Learning
Die Analyse verwendete Google Colaboratry, wie im YouTube-Video gezeigt.
Dann würde ich es gerne machen.
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')
Nächster
Ich werde es tun.
#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])
Ich kann das Bild sehen. Schauen wir uns als nächstes die Beschriftung an, die diesem Bild zugeordnet ist.
print('The image label is:', x_train[index])
Wenn Sie sich das ansehen, können Sie sehen, dass es mit "4" gekennzeichnet ist. Als nächstes enthält dieser Datensatz 10 verschiedene Bilder.
# 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]])
Es scheint also, dass dies ein Bild eines "Hirsches" ist (selbst wenn Sie sich oft dem Bildschirm nähern, ist es schwierig ...).
Setzen Sie als nächstes die erläuterte Variable y auf "one_hot_encoding" und weisen Sie eine Zahl von 0 oder 1 zu (1, falls korrekt, andernfalls 0), damit die Bildbezeichnung in das neuronale Netzwerk eingefügt werden kann.
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])
Standardisieren Sie dann den Datensatz (0-1).
x_train = x_train / 255
x_test = x_test / 255
x_train[index]
Dies ist ungefähr das Ende der Verarbeitung. Als nächstes bauen wir ein CNN-Modell!
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'))
Als nächstes kompilieren Sie das Modell und trainieren es.
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)
Testen Sie das fertige Modell mit Testdaten.
model.evaluate(x_test, y_test_one_hot)[1]
>> 0.6811000108718872
Nun, im Video war es genauso, aber das Ergebnis ist nicht so gut. .. ..
Zeichnen Sie vorerst die Genauigkeit und den Verlustfehler mit 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()
Lassen Sie uns abschließend eine Vorhersage mit einem Modell unter Verwendung eines geeigneten Bildes treffen (diesmal das Bild einer Katze).
# 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), '%')
Ergebnis ist,
cat : 51.09 % dog : 48.73 % deer : 0.06 % bird : 0.04 % frog : 0.04 %
Das Ergebnis war, dass ich kaum beurteilen konnte, ob es sich um eine Katze oder einen Hund handelte (lacht). Die Genauigkeit des Modells war nicht gut und das verwendete Bild war nicht gut.
Dieses Mal studierte ich die Bildbeurteilung mit Tensorflow und Keras. Natürlich bin ich mir bewusst, dass es nicht genau genug ist, um verwendet zu werden, aber ich denke, es war ein gutes Sprungbrett.
Vielen Dank für Ihre weitere Unterstützung.
(Bisher gelernt)
Recommended Posts