- ما هو تصنيف الصور؟
- تصنيف الصور باستخدام TensorFlow
- معالجة البيانات
- تصنيف الصور باستخدام TensorFlow: بناء نموذج
- إعداد الطبقات
- تجميع النموذج
- تصنيف الصور باستخدام TensorFlow: تدريب النموذج
- التحقق من التنبؤات
في هذه المقالة، سأشرح كيف يمكننا تدريب نموذج الشبكة العصبية لمهمة تصنيف الصور باستخدام TensorFlow. بالنسبة لأولئك الجدد على TensorFlow، فإن TensorFlow عبارة عن نظام أساسي مفتوح المصدر وشامل للتعلم الآلي. لديها نظام بيئي شامل ومرن من الأدوات والمكتبات وموارد المجتمع التي تسمح للباحثين بدفع التطورات المتطورة في تعلم الآلة، والمطورين لبناء ونشر التطبيقات القائمة على التعلم الآلي بسهولة.
ما هو تصنيف الصور؟
تصنيف الصورة هو عملية تصنيف وتسمية مجموعات البكسل أو المتجهات في صورة ما وفقًا لقواعد محددة. يمكن تصميم قانون التصنيف باستخدام خاصية واحدة أو أكثر من الخصائص الطيفية spectral أو التركيبية textural.
تصنيف الصور باستخدام TensorFlow
الآن، يمكن أيضًا إجراء تصنيف الصور باستخدام نماذج أقل تعقيدًا مقدمة من Scikit-Learn، فلماذا TensorFlow. باستخدام TensorFlow، يمكننا بناء شبكة عصبية لمهمة تصنيف الصور. من خلال بناء شبكة عصبية يمكننا اكتشاف أنماط خفية أكثر من مجرد تصنيف. لنبدأ الآن بمهمة تصنيف الصور باستخدام TensorFlow عن طريق استيراد بعض الحزم الضرورية:
# TensorFlow and tf.keras
import tensorflow as tf
from tensorflow import keras
# Helper libraries
import numpy as np
import matplotlib.pyplot as plt
استيراد مجموعة بيانات Fashion MNIST
تم تصميم Fashion MNIST كبديل سريع لمجموعة بيانات MNIST الكلاسيكية – غالبًا ما تستخدم كـ “Hello, World” لبرامج التعلم الآلي للرؤية الحاسوبية. تحتوي مجموعة بيانات MNIST على صور لأرقام مكتوبة بخط اليد (0، 1، 2، إلخ) بتنسيق مماثل لصور الملابس التي سأستخدمها لمهمة تصنيف الصور باستخدام TensorFlow.
fashion_mnist = keras.datasets.fashion_mnist
(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
في مجموعة البيانات، يتم تعيين كل صورة في تسمية واحدة. نظرًا لعدم تحديد أسماء الفئات في مجموعة البيانات، نحتاج إلى تخزينها هنا حتى نتمكن من استخدامها لاحقًا عند عرض الصور:
class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat',
'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']
معالجة البيانات
بالنسبة لمهمة تصنيف الصور هذه باستخدام TensorFlow، يجب معالجة البيانات مسبقًا قبل تدريب الشبكة العصبية. إذا قمت بفحص الإطار الأول لمجموعة التدريب، فستجد أن قيم البكسل بين 0 و255:
plt.figure()
plt.imshow(train_images[0])
plt.colorbar()
plt.grid(False)
plt.show()
سأقوم الآن بتوسيع نطاق هذه القيم إلى نطاق من 0 إلى 1 قبل تمريرها إلى نموذج الشبكة العصبية. للقيام بذلك، نحتاج إلى قسمة القيم على 255. يجب معالجة مجموعة التدريب ومجموعة الاختبار بالطريقة نفسها:
train_images = train_images / 255.0
test_images = test_images / 255.0
للتحقق من أن البيانات بالتنسيق الصحيح وللتحقق من استعدادنا لإنشاء وتدريب الشبكة العصبية لتصنيف الصور باستخدام TensorFlow، فلنعرض أول 25 صورة لمجموعة التدريب ونعرض اسم الفئة تحت كل صورة:
plt.figure(figsize=(10,10))
for i in range(25):
plt.subplot(5,5,i+1)
plt.xticks([])
plt.yticks([])
plt.grid(False)
plt.imshow(train_images[i], cmap=plt.cm.binary)
plt.xlabel(class_names[train_labels[i]])
تصنيف الصور باستخدام TensorFlow: بناء نموذج
الآن لبناء الشبكة العصبية لمهمة تصنيف الصور باستخدام TensorFlow، نحتاج أولاً إلى تكوين طبقات النموذج ثم المضي قدمًا في تجميع compiling النموذج.
إعداد الطبقات
اللبنة الأساسية للشبكات العصبية هي طبقاتها. تعمل الطبقات عن طريق استخراج التمثيلات من البيانات التي يتم إدخالها فيها. معظم التعلم العميق، النماذج تتضمن عمل طبقات بسيطة معًا. الآن، دعنا ننشئ طبقات شبكتنا العصبية:
model = keras.Sequential([
keras.layers.Flatten(input_shape=(28, 28)),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dense(10)
])
تجميع النموذج
الآن، دعنا نمضي قدمًا في تجميع compiling نموذجنا:
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
تصنيف الصور باستخدام TensorFlow: تدريب النموذج
الآن، دعنا ندرب الشبكة العصبية على مهمة تصنيف الصور باستخدام TensorFlow، وقم بعمل تنبؤات بشأنها:
#Fitting the Model
model.fit(train_images, train_labels, epochs=10)
#Evaluating Accuracy
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
print('\nTest accuracy:', test_acc)
Test accuracy: 0.8817999958992004
#Make Predictions
probability_model = tf.keras.Sequential([model,
tf.keras.layers.Softmax()])
predictions = probability_model.predict(test_images)
predictions[0]
array([1.1349098e-09, 1.0395625e-09, 3.4154518e-10, 8.3033120e-12,
6.5739442e-10, 5.9645530e-03, 9.4151291e-09, 1.1747092e-02,
8.7000714e-08, 9.8228824e-01], dtype=float32)
التوقع هو مصفوفة من 10 أرقام. إنها تمثل “ثقة confidence” النموذج في أن الصورة تتطابق مع كل قطعة من الملابس العشرة المختلفة. دعنا نرى التصنيف الذي يحتوي على أعلى قيمة ثقة:
np.argmax(predictions[0])
Output: 9
وبالتالي، فإن النموذج مقتنع تمامًا بأن هذه الصورة عبارة عن حذاء للكاحل ankle boot أو class_names [9]. يوضح فحص تسمية الاختبار أن هذا التصنيف صحيح:
test_labels[0]
9
الآن، سأقوم بإنشاء دالة مساعدة لرسم توقعاتنا:
def plot_image(i, predictions_array, true_label, img):
true_label, img = true_label[i], img[i]
plt.grid(False)
plt.xticks([])
plt.yticks([])
plt.imshow(img, cmap=plt.cm.binary)
predicted_label = np.argmax(predictions_array)
if predicted_label == true_label:
color = 'blue'
else:
color = 'red'
plt.xlabel("{} {:2.0f}% ({})".format(class_names[predicted_label],
100*np.max(predictions_array),
class_names[true_label]),
color=color)
def plot_value_array(i, predictions_array, true_label):
true_label = true_label[i]
plt.grid(False)
plt.xticks(range(10))
plt.yticks([])
thisplot = plt.bar(range(10), predictions_array, color="#777777")
plt.ylim([0, 1])
predicted_label = np.argmax(predictions_array)
thisplot[predicted_label].set_color('red')
thisplot[true_label].set_color('blue')
التحقق من التنبؤات
دعونا نلقي نظرة على الإطار 0 من التوقعات وجدول التنبؤ. تسميات التنبؤ الصحيحة باللون الأزرق وعلامات التوقع غير الصحيحة باللون الأحمر:
i = 0
plt.figure(figsize=(6,3))
plt.subplot(1,2,1)
plot_image(i, predictions[i], test_labels, test_images)
plt.subplot(1,2,2)
plot_value_array(i, predictions[i], test_labels)
plt.show()
# Plot the first X test images, their predicted labels, and the true labels.
# Color correct predictions in blue and incorrect predictions in red.
num_rows = 5
num_cols = 3
num_images = num_rows*num_cols
plt.figure(figsize=(2*2*num_cols, 2*num_rows))
for i in range(num_images):
plt.subplot(num_rows, 2*num_cols, 2*i+1)
plot_image(i, predictions[i], test_labels, test_images)
plt.subplot(num_rows, 2*num_cols, 2*i+2)
plot_value_array(i, predictions[i], test_labels)
plt.tight_layout()
plt.show()
يبدو الإخراج رائعًا، فقط الأحذية التي يتم التعرف عليها على أنها خاطئة مثل الصنادل. آمل أن تكون قد أحببت هذه المقالة حول تصنيف الصور باستخدام التعلم الآلي.