1. نظرة عامة
سيرشدك هذا التمرين العملي إلى الأدوات المختلفة في "دفاتر ملاحظات AI Platform" لاستكشاف بياناتك وإنشاء نماذج أولية لنماذج تعلُّم الآلة.
ما ستتعرّف عليه
ستتعرَّف على كيفية:
- إنشاء وتخصيص مثيل AI Platform Notebooks
- تتبُّع رمز دفاتر الملاحظات باستخدام git، المدمج مباشرةً في "دفاتر ملاحظات AI Platform"
- استخدام أداة What-If Tool داخل دفتر الملاحظات
يبلغ إجمالي تكلفة تشغيل هذا الدرس التطبيقي على Google Cloud حوالي 1 دولار أمريكي. يمكنك الاطّلاع على التفاصيل الكاملة حول أسعار "دفاتر ملاحظات AI Platform" هنا.
2. إنشاء مثيل من "دفاتر ملاحظات AI Platform"
يجب أن يكون لديك مشروع على Google Cloud Platform مع تفعيل الفوترة لتتمكّن من تنفيذ هذا الدرس العملي. لإنشاء مشروع، اتّبِع التعليمات هنا.
الخطوة 2: تفعيل واجهة برمجة التطبيقات Compute Engine API
انتقِل إلى Compute Engine وانقر على تفعيل إذا لم يكن مفعّلاً بعد. يجب توفير هذه المعلومات لإنشاء مثيل دفتر الملاحظات.
الخطوة 3: إنشاء مثيل دفتر ملاحظات
انتقِل إلى قسم "دفاتر ملاحظات AI Platform" في Cloud Console وانقر على إنشاء مثيل جديد. بعد ذلك، اختَر أحدث نوع مثيل TensorFlow 2 Enterprise بدون وحدات معالجة الرسومات:

أدخِل اسمًا لآلتك الافتراضية أو استخدِم الاسم التلقائي. بعد ذلك، سنستكشف خيارات التخصيص. انقر على الزر تخصيص:

تتضمّن "دفاتر ملاحظات AI Platform" العديد من خيارات التخصيص المختلفة، بما في ذلك المنطقة التي يتم نشر مثيلك فيها ونوع الصورة وحجم الآلة وعدد وحدات معالجة الرسومات وغير ذلك. سنستخدم القيم التلقائية للمنطقة والبيئة. بالنسبة إلى إعداد الجهاز، سنستخدم جهاز n1-standard-8:

لن نضيف أي وحدات معالجة رسومات، وسنستخدم الإعدادات التلقائية لقرص التمهيد والشبكات والأذونات. انقر على إنشاء لإنشاء مثيلك. سيستغرق إكمال هذه الخطوة بضع دقائق.
بعد إنشاء الآلة الافتراضية، ستظهر علامة اختيار خضراء بجانبها في واجهة مستخدم "دفاتر الملاحظات". انقر على فتح JupyterLab لفتح مثيلك وبدء إنشاء النماذج الأولية:

عند فتح الجهاز الافتراضي، أنشئ دليلاً جديدًا باسم codelab. هذا هو الدليل الذي سنعمل منه طوال هذا التمرين العملي:

انقر على دليل codelab الذي أنشأته حديثًا من خلال النقر المزدوج عليه، ثم اختَر دفتر ملاحظات Python 3 من المشغّل:

أعِد تسمية دفتر الملاحظات إلى demo.ipynb أو أي اسم آخر تريده.
الخطوة 4: استيراد حِزم Python
أنشئ خلية جديدة في دفتر الملاحظات واستورِد المكتبات التي سنستخدمها في هذا الدرس العملي:
import pandas as pd
import tensorflow as tf
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense
import numpy as np
import json
from sklearn.model_selection import train_test_split
from sklearn.utils import shuffle
from google.cloud import bigquery
from witwidget.notebook.visualization import WitWidget, WitConfigBuilder
3- ربط بيانات BigQuery بدفتر الملاحظات
أتاحت خدمة BigQuery، وهي مستودع بيانات كبير من Google Cloud، العديد من مجموعات البيانات بشكل علني لتتمكّن من استكشافها. تتيح AI Platform Notebooks إمكانية التكامل المباشر مع BigQuery بدون الحاجة إلى المصادقة.
في هذا الدرس التطبيقي، سنستخدم مجموعة بيانات الولادات. يحتوي هذا الملف على بيانات حول كل ولادة تقريبًا في الولايات المتحدة على مدار فترة زمنية تبلغ 40 عامًا، بما في ذلك وزن الطفل عند الولادة ومعلومات ديموغرافية عن والدَي الطفل. سنستخدم مجموعة فرعية من الميزات للتنبؤ بالوزن عند الولادة.
الخطوة 1: تنزيل بيانات BigQuery إلى دفتر الملاحظات
سنستخدم مكتبة برامج Python للعملاء في BigQuery لتنزيل البيانات إلى Pandas DataFrame. تبلغ سعة مجموعة البيانات الأصلية 21 غيغابايت وتحتوي على 123 مليون صف. لتبسيط الأمور، سنستخدم 10,000 صف فقط من مجموعة البيانات.
أنشئ طلب البحث وعايِن DataFrame الناتج باستخدام الرمز التالي. في هذا المثال، نحصل على 4 ميزات من مجموعة البيانات الأصلية، بالإضافة إلى وزن الطفل (وهو ما سيتوقّعه النموذج). تعود مجموعة البيانات إلى سنوات عديدة، ولكن بالنسبة إلى هذا النموذج، سنستخدم البيانات التي تم جمعها بعد عام 2000 فقط:
query="""
SELECT
weight_pounds,
is_male,
mother_age,
plurality,
gestation_weeks
FROM
publicdata.samples.natality
WHERE year > 2000
LIMIT 10000
"""
df = bigquery.Client().query(query).to_dataframe()
df.head()
للحصول على ملخّص للميزات الرقمية في مجموعة البيانات، نفِّذ ما يلي:
df.describe()
يعرض هذا القسم المتوسط والانحراف المعياري والحد الأدنى والمقاييس الأخرى للأعمدة الرقمية. أخيرًا، لنحصل على بعض البيانات في العمود المنطقي الذي يشير إلى جنس الطفل. يمكننا إجراء ذلك باستخدام طريقة value_counts في Pandas:
df['is_male'].value_counts()
يبدو أنّ مجموعة البيانات متوازنة تقريبًا بنسبة 50/50 حسب الجنس.
الخطوة 2: تجهيز مجموعة البيانات للتدريب
بعد أن نزّلنا مجموعة البيانات إلى دفتر الملاحظات كإطار بيانات Pandas، يمكننا إجراء بعض المعالجة المسبقة وتقسيمها إلى مجموعات تدريب واختبار.
أولاً، لنحذف الصفوف التي تحتوي على قيم فارغة من مجموعة البيانات ونعيد ترتيب البيانات:
df = df.dropna()
df = shuffle(df, random_state=2)
بعد ذلك، استخرِج عمود التصنيف إلى متغير منفصل وأنشئ DataFrame يحتوي على الميزات فقط. بما أنّ is_male قيمة منطقية، سنحوّلها إلى عدد صحيح لكي تكون جميع المدخلات إلى نموذجنا رقمية:
labels = df['weight_pounds']
data = df.drop(columns=['weight_pounds'])
data['is_male'] = data['is_male'].astype(int)
الآن، إذا عاينت مجموعة البيانات من خلال تنفيذ data.head()، من المفترض أن ترى الميزات الأربع التي سنستخدمها في التدريب.
4. إعداد git
تتضمّن "دفاتر ملاحظات AI Platform" عملية دمج مباشرة مع git، ما يتيح لك التحكّم في الإصدار مباشرةً من داخل بيئة دفتر الملاحظات. يتيح ذلك إمكانية إرسال الرمز البرمجي مباشرةً في واجهة مستخدم دفتر الملاحظات أو من خلال "وحدة التحكّم" المتاحة في JupyterLab. في هذا القسم، سنبدأ مستودع git في دفتر الملاحظات وننفّذ أول عملية إيداع من خلال واجهة المستخدم.
الخطوة 1: بدء مستودع git
من دليل codelab، اختَر Git ثم Init من شريط القوائم العلوي في JupyterLab:

عندما يُطلب منك تحديد ما إذا كنت تريد تحويل هذا الدليل إلى مستودع Git، اختَر نعم. بعد ذلك، انقر على رمز Git في الشريط الجانبي الأيمن للاطّلاع على حالة ملفاتك وعمليات الدمج:

الخطوة 2: إجراء أول عملية إيداع
في واجهة المستخدم هذه، يمكنك إضافة ملفات إلى عملية الدمج، والاطّلاع على اختلافات الملفات (سنتناول ذلك لاحقًا)، ودمج التغييرات. لنبدأ بتثبيت ملف دفتر الملاحظات الذي أضفناه للتو.
ضَع علامة في المربّع بجانب ملف دفتر ملاحظات demo.ipynb لتجهيزه لعملية الإيداع (يمكنك تجاهل الدليل .ipynb_checkpoints/). أدخِل رسالة الالتزام في مربّع النص، ثم انقر على علامة الاختيار لتنفيذ التغييرات:

أدخِل اسمك وعنوان بريدك الإلكتروني عندما يُطلب منك ذلك. بعد ذلك، ارجع إلى علامة التبويب السجلّ للاطّلاع على أول عملية إيداع:

يُرجى العِلم أنّ لقطات الشاشة قد لا تتطابق مع واجهة المستخدم تمامًا، وذلك بسبب التحديثات التي تم إجراؤها منذ نشر هذه التجربة.
5- إنشاء نموذج TensorFlow وتدريبه
سنستخدم مجموعة بيانات معدّل الولادات في BigQuery التي نزّلناها إلى دفتر الملاحظات لإنشاء نموذج يتوقّع وزن الطفل عند الولادة. في هذا التمرين العملي، سنركّز على أدوات دفتر الملاحظات بدلاً من دقة النموذج نفسه.
الخطوة 1: تقسيم بياناتك إلى مجموعات تدريب واختبار
سنستخدم أداة train_test_split المساعدة في Scikit Learn لتقسيم بياناتنا قبل إنشاء النموذج:
x,y = data,labels
x_train,x_test,y_train,y_test = train_test_split(x,y)
أصبحنا الآن جاهزين لإنشاء نموذج TensorFlow.
الخطوة 2: إنشاء نموذج TensorFlow وتدريبه
سننشئ هذا النموذج باستخدام واجهة برمجة التطبيقات Sequential للنموذج tf.keras، والتي تتيح لنا تحديد النموذج كمجموعة من الطبقات. إليك كل الرموز التي نحتاجها لإنشاء النموذج:
model = Sequential([
Dense(64, activation='relu', input_shape=(len(x_train.iloc[0]),)),
Dense(32, activation='relu'),
Dense(1)]
)
بعد ذلك، سنجمّع النموذج لنتمكّن من تدريبه. سنختار هنا أداة تحسين النموذج ودالة الخسارة والمقاييس التي نريد أن يسجّلها النموذج أثناء التدريب. بما أنّ هذا نموذج انحدار (يتوقّع قيمة رقمية)، سنستخدم متوسط الخطأ التربيعي بدلاً من الدقة كمقياس:
model.compile(optimizer=tf.keras.optimizers.RMSprop(),
loss=tf.keras.losses.MeanSquaredError(),
metrics=['mae', 'mse'])
يمكنك استخدام الدالة model.summary() المفيدة في Keras للاطّلاع على شكل وعدد المَعلمات القابلة للتدريب في النموذج على كل طبقة.
نحن الآن جاهزون لتدريب نموذجنا. كل ما علينا فعله هو استدعاء طريقة fit()، وتمرير بيانات التدريب والتصنيفات إليها. سنستخدم هنا المَعلمة الاختيارية validation_split، والتي ستحتوي على جزء من بيانات التدريب للتحقّق من صحة النموذج في كل خطوة. من المفترض أن ينخفض كلّ من معدّل الخطأ في التدريب والتحقّق. لكن تذكَّر أنّنا في هذا المثال نركّز بشكل أكبر على أدوات النماذج ودفاتر الملاحظات بدلاً من جودة النموذج:
model.fit(x_train, y_train, epochs=10, validation_split=0.1)
الخطوة 3: إنشاء توقّعات بشأن الأمثلة الاختبارية
للاطّلاع على أداء نموذجنا، لننشئ بعض التوقعات التجريبية استنادًا إلى أول 10 أمثلة من مجموعة البيانات التجريبية.
num_examples = 10
predictions = model.predict(x_test[:num_examples])
بعد ذلك، سنكرّر توقّعات نموذجنا، ونقارنها بالقيمة الفعلية:
for i in range(num_examples):
print('Predicted val: ', predictions[i][0])
print('Actual val: ',y_test.iloc[i])
print()
الخطوة 4: استخدام git diff وإجراء commit للتغييرات
بعد إجراء بعض التغييرات على دفتر الملاحظات، يمكنك تجربة ميزة git diff المتوفّرة في واجهة مستخدم git في "دفاتر الملاحظات". من المفترض أن تظهر الآن ورقة ملاحظات demo.ipynb ضمن القسم "تم التغيير" في واجهة المستخدم. مرِّر مؤشر الماوس فوق اسم الملف وانقر على رمز الاختلاف:

من المفترض أن تتمكّن من رؤية اختلاف التغييرات، كما يلي:

سننفّذ هذه المرة التغييرات من خلال سطر الأوامر باستخدام "الوحدة الطرفية". من قائمة Git في شريط القوائم العلوي في JupyterLab، اختَر أمر Git في الوحدة الطرفية. إذا كانت علامة التبويب git في الشريط الجانبي الأيسر مفتوحة أثناء تنفيذ الأوامر أدناه، ستتمكّن من رؤية التغييرات في واجهة مستخدم git.
في مثيل الوحدة الطرفية الجديد، شغِّل الأمر التالي لتجهيز ملف دفتر الملاحظات لإجراء عملية الإيداع:
git add demo.ipynb
بعد ذلك، نفِّذ الأمر التالي لتطبيق التغييرات (يمكنك استخدام أي رسالة تطبيق تريدها):
git commit -m "Build and train TF model"
بعد ذلك، من المفترض أن يظهر آخر تغيير تم إجراؤه في السجلّ:

6. استخدام "أداة ماذا لو" مباشرةً من دفتر الملاحظات
أداة "ماذا لو" هي واجهة مرئية تفاعلية مصمّمة لمساعدتك في عرض مجموعات البيانات بشكل مرئي وفهم نتائج نماذج تعلُّم الآلة بشكل أفضل. وهي أداة مفتوحة المصدر أنشأها فريق PAIR في Google. وعلى الرغم من أنّها تعمل مع أي نوع من النماذج، إلا أنّها تتضمّن بعض الميزات المصمّمة حصريًا لمنصة Cloud AI Platform.
تتوفّر "أداة What-If" مثبّتة مسبقًا في مثيلات "دفاتر ملاحظات Cloud AI Platform" التي تتضمّن TensorFlow. سنستخدمه هنا لمعرفة أداء النموذج بشكل عام وفحص سلوكه على نقاط البيانات من مجموعة الاختبار.
الخطوة 1: إعداد البيانات لاستخدام "أداة ماذا لو؟"
للاستفادة إلى أقصى حدّ من أداة "ماذا لو؟"، سنرسل إليها أمثلة من مجموعة الاختبار مع تصنيفات البيانات الأساسية لهذه الأمثلة (y_test)، لنتمكّن من مقارنة ما توقّعه نموذجنا بالبيانات الأساسية. نفِّذ سطر الرمز البرمجي أدناه لإنشاء DataFrame جديد يتضمّن أمثلة الاختبار وتصنيفاتها:
wit_data = pd.concat([x_test, y_test], axis=1)
في هذا التمرين العملي، سنربط "أداة ماذا لو" بالنموذج الذي درّبناه للتو في دفتر الملاحظات. لإجراء ذلك، علينا كتابة دالة تستخدمها الأداة لتشغيل نقاط بيانات الاختبار هذه على النموذج:
def custom_predict(examples_to_infer):
preds = model.predict(examples_to_infer)
return preds
الخطوة 2: إنشاء مثيل لأداة "ماذا لو؟"
سننشئ مثيلاً لأداة What-If Tool من خلال تمرير 500 مثال من مجموعة بيانات الاختبار المدمجة بالإضافة إلى تصنيفات الحقيقة الأساسية التي أنشأناها للتو. ننشئ مثيلاً من WitConfigBuilder لإعداد الأداة، ونمرّر إليها بياناتنا ودالة التوقّع المخصّصة التي حدّدناها أعلاه، بالإضافة إلى الهدف (الشيء الذي نتوقّعه) ونوع النموذج:
config_builder = (WitConfigBuilder(wit_data[:500].values.tolist(), data.columns.tolist() + ['weight_pounds'])
.set_custom_predict_fn(custom_predict)
.set_target_feature('weight_pounds')
.set_model_type('regression'))
WitWidget(config_builder, height=800)
من المفترض أن يظهر لك ما يلي عند تحميل "أداة ماذا لو":

على المحور السيني، يمكنك الاطّلاع على نقاط بيانات الاختبار موزّعة حسب قيمة الوزن المتوقّعة للنموذج، weight_pounds.
الخطوة 3: استكشاف سلوك النموذج باستخدام "أداة ماذا لو"
يمكنك إجراء الكثير من المهام الرائعة باستخدام أداة "ماذا لو؟". سنستكشف بعضًا منها فقط هنا. أولاً، لنلقِ نظرة على أداة تعديل نقاط البيانات. يمكنك اختيار أي نقطة بيانات للاطّلاع على سماتها وتغيير قيم السمات. ابدأ بالنقر على أي نقطة بيانات:

على يمين الصفحة، ستظهر قيم الميزة لنقطة البيانات التي اخترتها. يمكنك أيضًا مقارنة تصنيف الحقيقة الأساسية لنقطة البيانات بالقيمة التي يتوقّعها النموذج. في الشريط الجانبي الأيمن، يمكنك أيضًا تغيير قيم الميزات وإعادة تنفيذ توقّع النموذج لمعرفة تأثير هذا التغيير في نموذجك. على سبيل المثال، يمكننا تغيير gestation_weeks إلى 30 لنقطة البيانات هذه من خلال النقر المزدوج عليها وإعادة تشغيل التوقّع:

باستخدام القوائم المنسدلة في قسم الرسم البياني في "أداة ماذا لو"، يمكنك إنشاء جميع أنواع التصورات المخصّصة. على سبيل المثال، إليك رسمًا بيانيًا يوضّح الوزن المتوقّع للنماذج على المحور x، وعمر الأم على المحور y، والنقاط الملوّنة حسب خطأ الاستدلال (يشير اللون الداكن إلى فرق أكبر بين الوزن المتوقّع والوزن الفعلي). في ما يلي، يبدو أنّه كلما انخفض الوزن، زاد خطأ النموذج قليلاً:

بعد ذلك، ضَع علامة في المربّع بجانب مخططات الاعتماد الجزئي على يمين الصفحة. يوضّح هذا المخطّط البياني كيف تؤثّر كل ميزة في توقّعات النموذج. على سبيل المثال، كلما زادت مدة الحمل، زاد أيضًا وزن الطفل المتوقّع في نموذجنا:

للحصول على المزيد من أفكار الاستكشاف باستخدام "أداة ماذا لو"، اطّلِع على الروابط في بداية هذا القسم.
7. اختياري: ربط مستودع git المحلي بحسابك على GitHub
أخيرًا، سنتعرّف على كيفية ربط مستودع git في مثيل دفتر الملاحظات بمستودع في حسابنا على GitHub. إذا أردت تنفيذ هذه الخطوة، يجب أن يكون لديك حساب على GitHub.
الخطوة 1: إنشاء مستودع جديد على GitHub
في حسابك على GitHub، أنشئ مستودعًا جديدًا. أدخِل اسمًا ووصفًا للمستودع، وحدِّد ما إذا كنت تريد أن يكون متاحًا للجميع، ثم انقر على إنشاء مستودع (لست بحاجة إلى إعداده باستخدام ملف README). في الصفحة التالية، اتّبِع التعليمات لنقل مستودع حالي من سطر الأوامر.
افتح نافذة "المحطة الطرفية" (Terminal)، وأضِف المستودع الجديد كمستودع بعيد. استبدِل username في عنوان URL للمستودع أدناه باسم المستخدم على GitHub، وyour-repo باسم المستودع الذي أنشأته للتو:
git remote add origin git@github.com:username/your-repo.git
الخطوة 2: المصادقة على GitHub في مثيل دفاتر الملاحظات
بعد ذلك، عليك المصادقة على GitHub من داخل مثيل دفتر الملاحظات. تختلف هذه العملية حسب ما إذا كانت ميزة "المصادقة الثنائية" مفعّلة على GitHub.
إذا لم تكن متأكدًا من الخطوات التي يجب اتّخاذها، اتّبِع الخطوات الواردة في مستندات GitHub لإنشاء مفتاح SSH، ثم أضِف المفتاح الجديد إلى GitHub.
الخطوة 3: التأكّد من ربط مستودع GitHub بشكل صحيح
للتأكّد من إعداد كل شيء بشكل صحيح، شغِّل git remote -v في نافذة الأوامر. من المفترض أن يظهر المستودع الجديد كمستودع بعيد. بعد ظهور عنوان URL لمستودع GitHub الخاص بك وبعد مصادقة حسابك على GitHub من دفتر الملاحظات، يمكنك إرسال البيانات مباشرةً إلى GitHub من مثيل دفتر الملاحظات.
لمزامنة مستودع git لدفتر الملاحظات المحلي مع مستودع GitHub الذي أنشأته حديثًا، انقر على زر التحميل إلى السحابة الإلكترونية في أعلى الشريط الجانبي Git:

أعِد تحميل مستودع GitHub، وستظهر لك التعليمات البرمجية للمفكرة مع عمليات الإيداع السابقة. إذا كان بإمكان الآخرين الوصول إلى مستودع GitHub الخاص بك وأردت سحب آخر التغييرات إلى دفتر الملاحظات، انقر على رمز التنزيل من السحابة الإلكترونية لمزامنة هذه التغييرات.
في علامة التبويب "السجلّ" ضمن واجهة مستخدم Git في "أوراق الملاحظات"، يمكنك معرفة ما إذا كانت عمليات الإيداع المحلية تتم مزامنتها مع GitHub. في هذا المثال، يتوافق origin/master مع مستودعنا على GitHub:

عند إجراء عمليات تثبيت جديدة، ما عليك سوى النقر على زر التحميل إلى السحابة الإلكترونية مرة أخرى لنقل هذه التغييرات إلى مستودع GitHub.
8. تهانينا!
لقد أنجزت الكثير في هذا الدرس التطبيقي 👏👏👏
للتلخيص، تعرّفت على كيفية:
- إنشاء مثيل AI Platform Notebook وتخصيصه
- تهيئة مستودع git محلي في هذا المثال، وإضافة عمليات حفظ من خلال واجهة مستخدم git أو سطر الأوامر، وعرض اختلافات git في واجهة مستخدم git الخاصة بدفتر الملاحظات
- إنشاء نموذج بسيط وتدريبه باستخدام TensorFlow 2
- استخدام أداة What-If Tool ضِمن مثيل Notebook
- ربط مستودع git الخاص بدفتر الملاحظات بمستودع خارجي على GitHub
9- تنظيف
إذا أردت مواصلة استخدام دفتر الملاحظات هذا، ننصحك بإيقافه عندما لا يكون قيد الاستخدام. من واجهة مستخدم Notebooks في Cloud Console، اختَر دفتر الملاحظات، ثم انقر على إيقاف:

إذا أردت حذف جميع المراجع التي أنشأتها في هذا المختبر، ما عليك سوى حذف مثيل دفتر الملاحظات بدلاً من إيقافه.
باستخدام قائمة "التنقّل" في Cloud Console، انتقِل إلى "مساحة التخزين" واحذف الحزمتَين اللتين أنشأتهما لتخزين مواد عرض النموذج.