نماذج نماذج أولية في دفاتر الملاحظات باستخدام AI Platform

1. نظرة عامة

سيساعدك هذا التمرين المعملي في استكشاف مجموعة من الأدوات المتوفرة في دفاتر الملاحظات حول منصة AI Platform لاستكشاف بياناتك وإنشاء نماذج أولية لنماذج تعلُّم الآلة.

المعلومات التي تطّلع عليها

وستتعرّف على كيفية:

  • إنشاء مثيل من AI Platform Notebook وتخصيصه
  • تتبَّع الرمز البرمجي لأوراق الملاحظات باستخدام git، وهو مدمج مباشرةً في AI Platform Notebook
  • استخدام أداة "ماذا لو" في دفتر ملاحظاتك

تبلغ التكلفة الإجمالية لتشغيل هذا التمرين على Google Cloud حوالي $1. يمكن الاطّلاع هنا على التفاصيل الكاملة حول أسعار أجهزة AI Platform Notebook.

2. إنشاء مثيل من AI Platform Notebook

ستحتاج إلى مشروع Google Cloud Platform مع تفعيل الفوترة لتشغيل هذا الدرس التطبيقي حول الترميز. لإنشاء مشروع، يُرجى اتّباع التعليمات هنا.

الخطوة 2: تفعيل Compute Engine API

انتقِل إلى Compute Engine واختَر تفعيل إذا لم يسبق لك تفعيله. ستحتاج إلى هذا لإنشاء مثيل دفتر الملاحظات.

الخطوة 3: إنشاء مثيل لورقة ملاحظات

انتقِل إلى قسم AI Platform Notebooks في Cloud Console وانقر على New Instance (مثيل جديد). بعد ذلك، اختَر أحدث نوع من مثيل TensorFlow 2 Enterprise بدون وحدات معالجة الرسومات:

9f2bb4dec1ba4f4f.png

أدخِل اسمًا للمثيل أو استخدِم الاسم التلقائي. ثم سنستكشف خيارات التخصيص. انقر على الزر تخصيص:

63be602ba45ca7c9.png

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

27101d232f765a17.png

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

بعد إنشاء المثيل، ستظهر لك علامة اختيار خضراء بجانبه في واجهة مستخدم دفاتر الملاحظات. حدد فتح JupyterLab لفتح المثيل وبدء إنشاء النموذج الأوّلي:

3598f414887ea9a8.png

عند فتح المثيل، أنشِئ دليلاً جديدًا باسم "درس تطبيقي" حول الترميز. هذا هو الدليل الذي سنستخدمه خلال هذا التمرين المعملي:

c16a821546acd92.png

انقر على دليل الدرس التطبيقي حول الترميز الذي تم إنشاؤه حديثًا من خلال النقر مرّتين عليه ثم اختَر دفتر الملاحظات Python 3 من مشغّل التطبيقات:

4390b1614ae8eae4.png

أعِد تسمية ورقة الملاحظات إلى 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 مع الدمج المباشر مع BigQuery بدون الحاجة إلى مصادقة.

سنستخدم مجموعة بيانات المواليد في هذا التمرين المعملي. يحتوي هذا على بيانات حول كل ولادة تقريبًا في الولايات المتحدة على مدار فترة زمنية تبلغ 40 عامًا، بما في ذلك وزن الطفل عند الولادة، ومعلومات ديموغرافية عن والدي الطفل. سنستخدم مجموعة فرعية من الخصائص للتنبؤ بوزن الطفل عند الولادة.

الخطوة 1: تنزيل بيانات BigQuery إلى ورقة الملاحظات

سنستخدم مكتبة برامج Python لأداة BigQuery لتنزيل البيانات في Pandas DataFrame. تبلغ مجموعة البيانات الأصلية 21 غيغابايت وتحتوي على 123 مليون صف. لتبسيط الأمور، سنستخدم 10000 صف فقط من مجموعة البيانات.

قم بإنشاء الاستعلام ومعاينة DataFrame الناتج بالتعليمة البرمجية التالية. نحصل هنا على 4 خصائص من مجموعة البيانات الأصلية، إلى جانب وزن الطفل (الشيء الذي سيتوقعه نموذجنا). يعود تاريخ مجموعة البيانات إلى سنوات عديدة، ولكن في هذا النموذج، سنستخدم فقط البيانات التي تعود إلى عام 2000 بعد عام 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()

يوضح هذا المتوسط والانحراف المعياري والحد الأدنى وغيرها من المقاييس للأعمدة الرقمية. وأخيرًا، دعونا نحصل على بعض البيانات على العمود المنطقي الذي يشير إلى جنس الجنين. ويمكننا إجراء ذلك باستخدام طريقة Pandas value_counts:

df['is_male'].value_counts()

يبدو أن مجموعة البيانات متوازنة تقريبًا 50/50 حسب الجنس.

الخطوة 2: إعداد مجموعة البيانات للتدريب

والآن بعد أن قمنا بتنزيل مجموعة البيانات إلى دفترنا على شكل Pandas DataFrame، يمكننا إجراء بعض عمليات المعالجة المسبقة لها وتقسيمها إلى مجموعات تدريب واختبار.

أولاً، لنقم بإسقاط الصفوف ذات القيم الفارغة من مجموعة البيانات ونقوم بترتيب البيانات عشوائيًا:

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 Notebooks مباشرةً مع git، لتتمكن من التحكّم في الإصدار مباشرةً من داخل بيئة الدفتر. ويدعم هذا تنفيذ الرمز مباشرةً في واجهة مستخدم الدفتر، أو عبر الوحدة الطرفية المتاحة في JupyterLab. في هذا القسم، سنبدأ في إعداد مستودع git في دفتر الملاحظات وإجراء أوّل عملية التزام عبر واجهة المستخدم.

الخطوة 1: إعداد مستودع git

من دليل الدرس التطبيقي حول الترميز، اختَر Git ثم Init من شريط القوائم العلوي في JupyterLab:

d9f1729358f18e58.png

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

1648d6828f11a6db.png

الخطوة 2: الاشتراك للمرة الأولى

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

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

fe7366522a3a268f.png

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

d03567c3592afb77.png

تجدر الإشارة إلى أنّ لقطات الشاشة قد لا تتطابق تمامًا مع واجهة المستخدم بسبب التعديلات التي تمّت منذ نشر هذا التمرين.

5- إنشاء نموذج TensorFlow وتدريبه

سنستخدم مجموعة بيانات ولادة BigQuery التي قمنا بتنزيلها على دفتر الملاحظات لإنشاء نموذج للتنبؤ بوزن الطفل. سوف نركز في هذا التمرين المعملي على أدوات دفتر الملاحظات، وليس على دقة النموذج نفسه.

الخطوة الأولى: تقسيم البيانات إلى مجموعات تدريب واختبار

سنستخدم أداة ساي كيت ليرن train_test_split لتقسيم البيانات قبل إنشاء نموذجنا:

x,y = data,labels
x_train,x_test,y_train,y_test = train_test_split(x,y)

نحن الآن جاهزون لإنشاء نموذج TensorFlow!

الخطوة 2: إنشاء نموذج TensorFlow وتدريبه

سننشئ هذا النموذج باستخدام واجهة برمجة التطبيقات tf.keras Sequential للنموذج، والتي تتيح لنا تعريف النموذج على أنّه حزمة من الطبقات. جميع التعليمات البرمجية التي نحتاجها لإنشاء النموذج هنا:

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()، وتمرير بيانات التدريب والتصنيفات إليها. وسنستخدم هنا المعلمة الاختيارية التحقق من صحة_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 وتنفيذ التغييرات

الآن بعد أن أجريت بعض التغييرات على دفتر الملاحظات، يمكنك تجربة ميزة git diff المتوفرة في واجهة مستخدم Notebooks git. من المفترض أن تكون ورقة الملاحظات "demo.ipynb" الآن ضمن القسم "تم التغيير". في واجهة المستخدم. حرك مؤشر الماوس فوق اسم الملف وانقر على رمز الاختلاف:

a370facb3632fb32.png

وبناءً على ذلك، من المفترض أن تتمكّن من التعرّف على اختلاف بين التغييرات التي أجريتها، كما في المثال التالي:

461c502bd3ab910e.png

هذه المرة سننفّذ التغييرات من خلال سطر الأوامر باستخدام تطبيق Terminal. من قائمة Git في شريط القوائم العلوي JupyterLab، حدد Git Command في Terminal. إذا كان لديك علامة التبويب git في الشريط الجانبي الأيسر مفتوحًا أثناء تشغيل الأوامر أدناه، ستتمكّن من رؤية التغييرات التي أجريتها في واجهة مستخدم git.

في المثيل الطرفي الجديد، قم بتشغيل ما يلي لتنظيم ملف دفتر الملاحظات للالتزام:

git add demo.ipynb

ثم قم بتشغيل ما يلي لتطبيق التغييرات (يمكنك استخدام أي رسالة تلتزم بها تريدها):

git commit -m "Build and train TF model"

بعد ذلك، ستظهر لك آخر خطة دفع في السجلّ:

a4b44045e97cb7a7.png

6- استخدام أداة "ماذا لو" مباشرةً من دفتر ملاحظاتك

أداة "ماذا لو" هي واجهة مرئية تفاعلية مصممة لمساعدتك في عرض مجموعات البيانات وفهم نتائج نماذج تعلُّم الآلة بشكل أفضل. إنه أداة مفتوحة المصدر أنشأها فريق PAIR في Google. على الرغم من أنّها تعمل مع أي نوع من النماذج، فإنّها تتضمّن بعض الميزات المصمَّمة حصريًا لمنصة Cloud AI Platform.

تتوفّر أداة "ماذا إذا" مثبَّتة مسبقًا في مثيلات أجهزة الكمبيوتر الدفترية من 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: إنشاء مثيل لأداة "ماذا لو"

سننشئ أداة "ماذا لو" من خلال تمرير 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)

يُفترض أن ترى شيئًا كهذا عند تحميل أداة "ماذا لو":

fcdc1cb7ed8e364e.png

على المحور س، يمكنك رؤية نقاط بيانات الاختبار موزعة حسب قيمة الوزن المتوقعة للنموذج، weight_pounds.

الخطوة 3: استكشاف سلوك النموذج باستخدام أداة "ماذا لو"

هناك الكثير من الأشياء الرائعة التي يمكنك تنفيذها باستخدام أداة What-If. سنستكشف عددًا قليلاً منها هنا. أولًا، لنلقِ نظرة على محرر نقطة البيانات. يمكنك اختيار أي نقطة بيانات لمعرفة ميزاتها وتغيير قيم الميزات. ابدأ بالنقر على أي نقطة بيانات:

2ba944f16240ff4b.png

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

aaa6a937c66758cf.png

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

cd2ce527a9044e7b.png

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

1fec2a64fb03f432.png

لمزيد من الأفكار للاستكشاف باستخدام أداة "ماذا لو"، اطّلِع على الروابط في بداية هذا القسم.

7. اختياري: ربط مستودع git المحلي بتطبيق GitHub

وأخيرًا، سوف نتعلم كيفية ربط مستودع git في مثيل الدفتر لدينا بمستودع ريبو في حساب جيت هب الخاص بنا. إذا أردت تنفيذ هذه الخطوة، يجب أن يكون لديك حساب على GitHub.

الخطوة 1: إنشاء مستودع جديد على GitHub

في حسابك على GitHub، أنشئ مستودعًا جديدًا. أدخِل اسمًا ووصفًا للمستودع، وحدِّد ما إذا كنت تريد إتاحته للجميع، ثم اختَر إنشاء مستودع (لن تحتاج إلى إعداده باستخدام ملف README). في الصفحة التالية، ستتّبع التعليمات لإرسال مستودع حالي من سطر الأوامر.

افتح نافذة المحطة الطرفية وأضِف المستودع الجديد كوحدة تحكّم عن بُعد. استبدِل 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 الجانبي:

eec001587bb9cfb1.png

قم بتحديث مستودع GitHub، وسترى رمز دفتر ملاحظاتك مع عمليات التنفيذ السابقة! إذا كان لدى الآخرين إمكانية الوصول إلى مستودع GitHub وكنت تريد سحب آخر التغييرات التي تم إجراؤها على دفتر الملاحظات، انقر على رمز التنزيل من السحابة الإلكترونية لمزامنة تلك التغييرات.

في علامة التبويب "السجل" في واجهة مستخدم Notebooks git، يمكنك معرفة ما إذا تمت مزامنة التزاماتك المحلية مع GitHub. في هذا المثال، يتوافق origin/master مع مستودعنا على GitHub:

2c3d1eb7cf95c24e.png

عند إجراء التزامات جديدة، ما عليك سوى النقر على زر التحميل في السحابة الإلكترونية مرة أخرى لإرسال هذه التغييرات إلى مستودع GitHub.

8. تهانينا!

لقد أنجزت الكثير في هذا التمرين 👏👏

للتلخيص، تعلمتَ كيفية:

  • إنشاء نسخة افتراضية من أداة AI Platform Notebook
  • إعداد مستودع git محلي في هذه الحالة، وإضافة التزامات عبر واجهة مستخدم git أو سطر الأوامر، وعرض اختلافات git في واجهة مستخدم Notebook git
  • إنشاء وتدريب نموذج TensorFlow 2 بسيط
  • استخدام أداة "ماذا إذا" داخل مثيل دفتر الملاحظات
  • ربط دفتر git repo بمستودع خارجي على GitHub

9. تنظيف

إذا أردت مواصلة استخدام ورقة الملاحظات هذه، ننصحك بإيقافها عندما لا تكون قيد الاستخدام. من واجهة مستخدم Notebooks في Cloud Console، اختَر ورقة الملاحظات ثم انقر على إيقاف:

ba727f9a0aefbc30.png

إذا كنت ترغب في حذف جميع الموارد التي أنشأتها في هذا التمرين المعملي، فاحذف مثيل دفتر الملاحظات بدلاً من إيقافه.

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