1. Ringkasan
Lab ini akan memandu Anda mempelajari berbagai alat di AI Platform Notebooks untuk mengeksplorasi data dan membuat prototipe model ML Anda.
Yang Anda pelajari
Anda akan mempelajari cara:
- Membuat dan menyesuaikan instance AI Platform Notebooks
- Lacak kode notebook Anda dengan git, yang terintegrasi langsung ke AI Platform Notebooks
- Menggunakan What-If Tool dalam notebook Anda
Total biaya untuk menjalankan lab ini di Google Cloud adalah sekitar $1. Detail selengkapnya tentang harga AI Platform Notebooks dapat ditemukan di sini.
2. Membuat instance AI Platform Notebooks
Anda memerlukan project Google Cloud Platform dengan penagihan yang diaktifkan untuk menjalankan codelab ini. Untuk membuat project, ikuti petunjuk di sini.
Langkah 2: Aktifkan Compute Engine API
Buka Compute Engine dan pilih Aktifkan jika belum diaktifkan. Anda akan memerlukan ini untuk membuat instance notebook.
Langkah 3: Buat instance notebook
Buka bagian AI Platform Notebooks di Konsol Cloud Anda, lalu klik New Instance. Kemudian, pilih jenis instance TensorFlow 2 Enterprise terbaru tanpa GPU:
Beri nama instance Anda atau gunakan default. Kemudian kita akan menjelajahi opsi penyesuaian. Klik tombol Customize:
AI Platform Notebooks memiliki berbagai opsi penyesuaian, termasuk: region tempat instance Anda di-deploy, jenis image, ukuran mesin, jumlah GPU, dan lainnya. Kita akan menggunakan setelan default untuk region dan lingkungan. Untuk konfigurasi mesin, kita akan menggunakan mesin n1-standard-8:
Kita tidak akan menambahkan GPU apa pun, dan kita akan menggunakan setelan default untuk boot disk, jaringan, dan izin. Pilih Create untuk membuat instance. Prosesnya perlu waktu beberapa menit sampai selesai.
Setelah instance dibuat, Anda akan melihat tanda centang hijau di sampingnya di UI Notebooks. Pilih Open JupyterLab untuk membuka instance dan memulai pembuatan prototipe:
Saat membuka instance, buat direktori baru bernama codelab. Ini adalah direktori yang akan kita kerjakan dari seluruh lab ini:
Klik direktori codelab yang baru dibuat dengan mengklik dua kali, lalu pilih notebook Python 3 dari peluncur:
Ganti nama notebook menjadi demo.ipynb
, atau nama apa pun yang ingin Anda berikan.
Langkah 4: Impor paket Python
Buat sel baru di notebook dan impor library yang akan kita gunakan dalam codelab ini:
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. Menghubungkan data BigQuery ke notebook Anda
BigQuery, big data warehouse Google Cloud, telah menyediakan banyak set data secara publik untuk eksplorasi Anda. AI Platform Notebooks mendukung integrasi langsung dengan BigQuery tanpa memerlukan autentikasi.
Untuk lab ini, kita akan menggunakan set data kelahiran. Ini berisi data tentang hampir setiap kelahiran di AS selama jangka waktu 40 tahun, termasuk berat lahir anak, dan informasi demografis tentang orang tua bayi tersebut. Kami akan menggunakan sebagian fitur untuk memprediksi berat lahir bayi.
Langkah 1: Download data BigQuery ke notebook kami
Kita akan menggunakan library klien Python untuk BigQuery guna mendownload data ke dalam DataFrame Pandas. {i>Dataset<i} asli adalah 21 GB dan berisi 123 juta baris. Untuk menyederhanakannya,kita hanya akan menggunakan 10.000 baris dari {i>dataset<i}.
Buat kueri dan lihat pratinjau DataFrame yang dihasilkan dengan kode berikut. Di sini kita mendapatkan 4 fitur dari {i>dataset<i} asli, beserta berat bayi (hal yang akan diprediksi oleh model kita). Set data sudah ada beberapa tahun ke belakang tetapi untuk model ini kita hanya akan menggunakan data setelah tahun 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()
Untuk mendapatkan ringkasan fitur numerik dalam {i>dataset<i} kita, jalankan:
df.describe()
Ini menunjukkan rata-rata, simpangan baku, minimum, dan metrik lainnya untuk kolom numerik kita. Terakhir, mari kita dapatkan beberapa data di kolom boolean yang menunjukkan jenis kelamin bayi. Kita dapat melakukannya dengan metode value_counts
Panda:
df['is_male'].value_counts()
Sepertinya {i>dataset<i} itu hampir seimbang 50/50 berdasarkan gender.
Langkah 2: Siapkan set data untuk pelatihan
Sekarang, setelah mendownload set data ke notebook sebagai DataFrame Pandas, kita dapat melakukan beberapa pra-pemrosesan dan membaginya menjadi set pelatihan dan pengujian.
Pertama, mari kita letakkan baris dengan nilai {i>null <i}dari {i>dataset<i} dan acak data tersebut:
df = df.dropna()
df = shuffle(df, random_state=2)
Selanjutnya, ekstrak kolom label menjadi variabel terpisah dan buat DataFrame hanya dengan fitur kita. Karena is_male
adalah boolean, kita akan mengonversinya menjadi bilangan bulat sehingga semua input ke model berupa numerik:
labels = df['weight_pounds']
data = df.drop(columns=['weight_pounds'])
data['is_male'] = data['is_male'].astype(int)
Sekarang, jika Anda melihat pratinjau set data dengan menjalankan data.head()
, Anda akan melihat empat fitur yang akan kita gunakan untuk pelatihan.
4. Melakukan inisialisasi git
AI Platform Notebooks memiliki integrasi langsung dengan git, sehingga Anda dapat melakukan kontrol versi secara langsung dalam lingkungan notebook Anda. Ini mendukung penyatuan kode langsung di UI notebook, atau melalui Terminal yang tersedia di JupyterLab. Di bagian ini, kita akan menginisialisasi repositori git di notebook dan membuat commit pertama melalui UI.
Langkah 1: Melakukan inisialisasi repositori git
Dari direktori codelab Anda, pilih Git lalu Init dari panel menu atas di JupyterLab:
Saat ditanya apakah Anda ingin menjadikan direktori ini sebagai Git Repo, pilih Yes. Kemudian, pilih ikon Git di sidebar kiri untuk melihat status file dan commit Anda:
Langkah 2: Buat commit pertama Anda
Pada UI ini, Anda dapat menambahkan file ke commit, melihat perbedaan file (kita akan membahasnya nanti), dan melakukan commit untuk perubahan. Mari kita mulai dengan melakukan {i>file<i} {i>notebook<i} yang baru saja kita tambahkan.
Centang kotak di samping file notebook demo.ipynb
Anda guna menyediakannya untuk commit (Anda dapat mengabaikan direktori .ipynb_checkpoints/
). Masukkan pesan commit di kotak teks, lalu klik tanda centang untuk melakukan commit untuk perubahan Anda:
Masukkan nama dan email Anda saat diminta. Lalu, kembali ke tab History untuk melihat commit pertama Anda:
Perhatikan bahwa screenshot mungkin tidak sama persis dengan UI Anda, karena adanya update sejak lab ini dipublikasikan.
5. Membangun dan melatih model TensorFlow
Kita akan menggunakan {i>dataset<i} kelahiran BigQuery yang telah kita unduh ke {i>notebook<i} untuk membangun model yang memprediksi berat bayi. Di lab ini, kita akan berfokus pada alat notebook, bukan akurasi model itu sendiri.
Langkah 1: Bagi data Anda menjadi set pelatihan dan pengujian
Kita akan menggunakan utilitas Scikit Learn train_test_split
untuk membagi data sebelum membuat model:
x,y = data,labels
x_train,x_test,y_train,y_test = train_test_split(x,y)
Sekarang kita siap membangun model TensorFlow!
Langkah 2: Build dan latih model TensorFlow
Kita akan membangun model ini menggunakan API model Sequential
tf.keras, yang memungkinkan kita menentukan model sebagai stack lapisan. Semua kode yang kita perlukan untuk membangun model ada di sini:
model = Sequential([
Dense(64, activation='relu', input_shape=(len(x_train.iloc[0]),)),
Dense(32, activation='relu'),
Dense(1)]
)
Kemudian, kita akan mengompilasi model sehingga dapat melatihnya. Di sini kita akan memilih pengoptimal, fungsi kerugian, dan metrik model yang ingin kita catat dalam log selama pelatihan. Karena ini adalah model regresi (memprediksi nilai numerik), kita menggunakan rata-rata kesalahan kuadrat, bukan akurasi sebagai metrik:
model.compile(optimizer=tf.keras.optimizers.RMSprop(),
loss=tf.keras.losses.MeanSquaredError(),
metrics=['mae', 'mse'])
Anda dapat menggunakan fungsi model.summary()
praktis dari Keras untuk melihat bentuk dan jumlah parameter model yang dapat dilatih di setiap lapisan.
Sekarang kita siap untuk melatih model. Yang perlu kita lakukan adalah memanggil metode fit()
, yang meneruskan data dan label pelatihan ke metode tersebut. Di sini kita akan menggunakan parameter validation_split opsional, yang akan menyimpan sebagian data pelatihan untuk memvalidasi model di setiap langkah. Idealnya, Anda ingin melihat kerugian pelatihan dan validasi keduanya menurun. Namun, perlu diingat bahwa dalam contoh ini, kita lebih berfokus pada alat model dan notebook daripada kualitas model:
model.fit(x_train, y_train, epochs=10, validation_split=0.1)
Langkah 3: Membuat prediksi pada contoh pengujian
Untuk melihat performa model, mari kita buat beberapa prediksi pengujian pada 10 contoh pertama dari set data pengujian.
num_examples = 10
predictions = model.predict(x_test[:num_examples])
Kemudian, kita akan melakukan iterasi prediksi model, membandingkannya dengan nilai sebenarnya:
for i in range(num_examples):
print('Predicted val: ', predictions[i][0])
print('Actual val: ',y_test.iloc[i])
print()
Langkah 4: Gunakan git diff dan commit perubahan
Setelah membuat beberapa perubahan pada notebook, Anda dapat mencoba fitur git diff yang tersedia di UI git Notebooks. Notebook demo.ipynb
sekarang akan berada di bagian "Diubah" di UI. Arahkan kursor ke nama file dan klik ikon perbedaan:
Dengan demikian, Anda akan dapat melihat perbedaan dari perubahan Anda, seperti berikut:
Kali ini kita akan meng-commit perubahan melalui command line menggunakan Terminal. Dari menu Git di panel menu atas JupyterLab, pilih Git Command in Terminal. Jika tab git di sidebar kiri terbuka saat Anda menjalankan perintah di bawah ini, Anda akan dapat melihat perubahan tercermin di UI git.
Dalam instance terminal baru Anda, jalankan perintah berikut guna melakukan stage file notebook Anda untuk commit:
git add demo.ipynb
Kemudian, jalankan perintah berikut untuk melakukan commit untuk perubahan (Anda dapat menggunakan pesan commit apa pun yang diinginkan):
git commit -m "Build and train TF model"
Kemudian Anda akan melihat commit terbaru dalam histori:
6. Menggunakan What-If Tool langsung dari notebook Anda
What-If Tool adalah antarmuka visual interaktif yang dirancang untuk membantu Anda memvisualisasikan set data dan lebih memahami output model ML Anda. Ini adalah alat open source yang dibuat oleh tim PAIR di Google. Meskipun berfungsi dengan semua jenis model, ia memiliki beberapa fitur yang dibangun secara eksklusif untuk Cloud AI Platform.
What-If Tool sudah terinstal di instance Cloud AI Platform Notebooks dengan TensorFlow. Di sini kita akan menggunakannya untuk melihat performa model secara keseluruhan dan memeriksa perilakunya pada titik data dari set pengujian.
Langkah 1: Siapkan data untuk What-If Tool
Untuk mengoptimalkan What-If Tool, kami akan mengirimkan contoh dari set pengujian kami bersama dengan label kebenaran dasar untuk contoh tersebut (y_test
). Dengan begitu, kita bisa membandingkan apa yang diprediksi model kita dengan kebenaran dasar. Jalankan baris kode di bawah ini untuk membuat DataFrame baru dengan contoh pengujian dan labelnya:
wit_data = pd.concat([x_test, y_test], axis=1)
Di lab ini, kita akan menghubungkan What-If Tool ke model yang baru saja kita latih di notebook. Untuk melakukannya, kita perlu menulis fungsi yang akan digunakan alat tersebut untuk menjalankan titik data pengujian ini ke model:
def custom_predict(examples_to_infer):
preds = model.predict(examples_to_infer)
return preds
Langkah 2: Buat instance What-If Tool
Kita akan membuat instance What-If Tool dengan meneruskan 500 contoh dari set data pengujian gabungan + label kebenaran dasar yang baru saja kita buat. Kita membuat instance WitConfigBuilder
untuk menyiapkan alat, meneruskan data, fungsi prediksi kustom yang kita tentukan di atas, bersama dengan target (hal yang kita prediksi), dan jenis model:
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)
Anda akan melihat tampilan seperti ini saat What-If Tool dimuat:
Pada sumbu x, Anda dapat melihat titik data pengujian yang disebarkan berdasarkan prediksi nilai bobot model, weight_pounds
.
Langkah 3: Pelajari perilaku model dengan What-If Tool
Ada banyak hal keren yang dapat Anda lakukan dengan {i>What-If Tool<i}. Kita akan mengeksplorasi beberapa di antaranya di sini. Pertama, mari kita lihat editor {i>datapoint<i}. Anda dapat memilih titik data mana pun untuk melihat fiturnya dan mengubah nilai fiturnya. Mulai dengan mengklik titik data mana pun:
Di sebelah kiri, Anda akan melihat nilai fitur untuk titik data yang telah dipilih. Anda juga dapat membandingkan label kebenaran dasar titik data dengan nilai yang diprediksi oleh model. Di sidebar kiri, Anda juga dapat mengubah nilai fitur dan menjalankan kembali prediksi model untuk melihat efek perubahan ini terhadap model Anda. Misalnya, kita dapat mengubah gestation_weeks ke 30 untuk titik data ini dengan mengklik dua kali untuk menjalankan prediksi ulang:
Dengan menggunakan menu {i>dropdown<i} di bagian plot {i>What-If Tool<i}, Anda dapat membuat segala macam visualisasi khusus. Misalnya, berikut adalah diagram dengan memprediksi berat badan pada sumbu x, usia ibu pada sumbu y, dan titik yang diberi warna oleh kesalahan inferensinya (lebih gelap berarti perbedaan yang lebih tinggi antara berat yang diprediksi dan berat aktual). Ini terlihat saat bobot berkurang, error model sedikit meningkat:
Selanjutnya, periksa tombol Partial dependence plots di sebelah kiri. Ini menunjukkan pengaruh setiap fitur terhadap prediksi model. Misalnya, seiring bertambahnya waktu kehamilan, prediksi berat bayi yang diprediksi model kita juga meningkat:
Untuk ide eksplorasi lainnya dengan What-If Tool, periksa link di awal bagian ini.
7. Opsional: hubungkan repositori git lokal Anda ke GitHub
Terakhir, kita akan mempelajari cara menghubungkan repo git di instance notebook ke repo di akun GitHub. Jika ingin melakukan langkah ini, Anda memerlukan akun GitHub.
Langkah 1: Buat repo baru di GitHub
Di akun GitHub Anda, buat repositori baru. Beri nama dan deskripsi, tentukan apakah Anda ingin repositori tersebut bersifat publik, dan pilih Create repository (Anda tidak perlu melakukan inisialisasi dengan README). Di halaman berikutnya, Anda akan mengikuti petunjuk untuk mendorong repositori yang ada dari command line.
Buka jendela Terminal, lalu tambahkan repositori baru Anda sebagai remote. Ganti username
di URL repo di bawah dengan nama pengguna GitHub Anda, dan your-repo
dengan nama yang baru saja Anda buat:
git remote add origin git@github.com:username/your-repo.git
Langkah 2: Autentikasi ke GitHub di instance notebook Anda
Selanjutnya, Anda harus melakukan autentikasi ke GitHub dari dalam instance notebook. Proses ini bervariasi, bergantung pada apakah Anda telah mengaktifkan autentikasi 2 langkah di GitHub.
Jika Anda tidak yakin harus memulai dari mana, ikuti langkah-langkah dalam dokumentasi GitHub untuk membuat kunci SSH, lalu menambahkan kunci baru ke GitHub.
Langkah 3: Pastikan Anda telah menautkan repo GitHub dengan benar
Untuk memastikan Anda telah menyiapkan semuanya dengan benar, jalankan git remote -v
di terminal Anda. Anda akan melihat repositori baru Anda tercantum sebagai remote. Setelah melihat URL repo GitHub dan telah mengautentikasi ke GitHub dari notebook, Anda dapat langsung mengirim ke GitHub dari instance notebook.
Untuk menyinkronkan repo git notebook lokal dengan repo GitHub yang baru dibuat, klik tombol upload cloud di bagian atas sidebar Git:
Refresh repositori GitHub Anda, dan Anda akan melihat kode notebook dengan commit sebelumnya. Jika orang lain memiliki akses ke repo GitHub dan Anda ingin melihat perubahan terbaru pada notebook, klik ikon download cloud untuk menyinkronkan perubahan tersebut.
Di tab History di UI git Notebooks, Anda dapat melihat apakah commit lokal Anda disinkronkan dengan GitHub. Dalam contoh ini, origin/master
sesuai dengan repo kami di GitHub:
Setiap kali Anda membuat commit baru, cukup klik tombol upload cloud lagi untuk mengirim perubahan tersebut ke repo GitHub Anda.
8. Selamat!
Anda telah melakukan banyak hal di lab ini 👏👏👏
Sebagai rangkuman, Anda telah mempelajari cara:
- Membuat instance AI Platform Notebook yang disesuaikan
- Melakukan inisialisasi repo git lokal dalam instance tersebut, menambahkan commit melalui UI git atau command line, melihat perbedaan git di UI git Notebook
- Membangun dan melatih model TensorFlow 2 sederhana
- Menggunakan What-If Tool dalam instance Notebook Anda
- Menghubungkan repo git Notebook Anda ke repositori eksternal di GitHub
9. Pembersihan
Jika ingin terus menggunakan notebook ini, sebaiknya nonaktifkan saat tidak digunakan. Dari UI Notebooks di Konsol Cloud, pilih notebook, lalu pilih Stop:
Jika ingin menghapus semua resource yang telah dibuat di lab ini, cukup hapus instance notebook, bukan menghentikannya.
Dengan menggunakan menu Navigasi di Konsol Cloud, jelajahi Penyimpanan dan hapus kedua bucket yang Anda buat untuk menyimpan aset model.