AI Platform Notebooks'ta model prototipleri oluşturma

1. Genel Bakış

Bu laboratuvarda, verilerinizi keşfetmeniz ve ML modellerinin prototipini oluşturmanız için AI Platform Notebooks'taki çeşitli araçlar açıklanmaktadır.

Öğrendikleriniz

Öğrenecekleriniz:

  • AI Platform Notebooks örneği oluşturma ve özelleştirme
  • Not defterlerinizin kodunu doğrudan AI Platform Notebooks'a entegre edilmiş git ile izleyin
  • Not defterinizdeki What-If Aracı'nı kullanma

Bu laboratuvarı Google Cloud'da çalıştırmanın toplam maliyeti yaklaşık 1 ABD dolarıdır. AI Platform Notebooks fiyatlandırmasıyla ilgili tüm ayrıntıları burada bulabilirsiniz.

2. AI Platform Notebooks örneği oluşturma

Bu codelab'i çalıştırmak için faturalandırmanın etkin olduğu bir Google Cloud Platform projesine ihtiyacınız var. Proje oluşturmak için buradaki talimatları uygulayın.

2. Adım: Compute Engine API'yi etkinleştirin

Compute Engine'e gidin ve zaten etkinleştirilmemişse Etkinleştir'i seçin. Not defteri örneğinizi oluşturmak için buna ihtiyacınız olacaktır.

3. Adım: Not defteri örneği oluşturun

Cloud Console'un AI Platform Notebooks bölümüne gidin ve New Instance'ı (Yeni Örnek) tıklayın. Ardından, GPU'suz en son TensorFlow 2 Enterprise örnek türünü seçin:

9f2bb4dec1ba4f4f.png

Örneğinize bir ad verin veya varsayılanı kullanın. Ardından özelleştirme seçeneklerini inceleyeceğiz. Özelleştir düğmesini tıklayın:

63be602ba45ca7c9.png

AI Platform Notebooks'ta örneğinizin dağıtıldığı bölge, görüntü türü, makine boyutu, GPU sayısı gibi birçok farklı özelleştirme seçeneği bulunur. Bölge ve ortam için varsayılan ayarları kullanacağız. Makine yapılandırması için n1-standard-8 makinesi kullanacağız:

27101d232f765a17.png

GPU eklemeyeceğiz, önyükleme diski, ağ iletişimi ve izin için varsayılan ayarları kullanacağız. Örneğinizi oluşturmak için Oluştur'u seçin. Bu işlemin tamamlanması birkaç dakika sürer.

Örnek oluşturulduktan sonra Not defterleri kullanıcı arayüzünde yanında yeşil bir onay işareti görürsünüz. Örneğinizi açıp prototip oluşturmaya başlamak için JupyterLab'i aç'ı seçin:

3598f414887ea9a8.png

Örneği açtığınızda codelab adında yeni bir dizin oluşturun. Bu laboratuvar boyunca kullanacağımız dizin aşağıda verilmiştir:

c16a821546acd92.png

Yeni oluşturduğunuz codelab dizinini çift tıklayıp başlatıcıdan Python 3 not defterini seçin:

4390b1614ae8eae4.png

Not defterinin adını demo.ipynb veya istediğiniz gibi değiştirin.

4. Adım: Python paketlerini içe aktarın

Not defterinde yeni bir hücre oluşturun ve bu codelab'de kullanacağımız kitaplıkları içe aktarın:

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 verilerini not defterinize bağlama

Google Cloud'un büyük veri ambarı BigQuery, birçok veri kümesini keşfiniz için herkese açık hâle getirdi. AI Platform Notebooks, kimlik doğrulama gerekmeden BigQuery ile doğrudan entegrasyonu destekler.

Bu laboratuvarda doğum veri kümesini kullanacağız. Bu veriler, ABD'de 40 yıllık dönemdeki neredeyse her doğumla ilgili verileri içerir. Bu veriler arasında çocuğun doğum ağırlığı ve bebeğin ebeveynleriyle ilgili demografik bilgiler yer alır. Bir bebeğin doğum ağırlığını tahmin etmek için özelliklerin bir alt kümesini kullanacağız.

1. Adım: BigQuery verilerini not defterimize indirin

Verileri bir Pandas DataFrame'e indirmek için BigQuery'nin Python istemci kitaplığını kullanacağız. Orijinal veri kümesi 21 GB'tır ve 123 milyon satır içerir. İşleri basitleştirmek için veri kümesinden yalnızca 10.000 satırı kullanacağız.

Sorguyu oluşturun ve aşağıdaki kodu kullanarak elde edilen DataFrame'i önizleyin. Burada, bebek ağırlığıyla (modelimizin tahmin edeceği) orijinal veri kümesinden 4 özellik alıyoruz. Veri kümesi yıllara dayanır ancak bu model için yalnızca 2000 sonrasına ait verileri kullanırız:

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()

Veri kümemizdeki sayısal özelliklerin bir özetini almak için şu komutu çalıştırın:

df.describe()

Sayısal sütunlarımıza ait ortalama, standart sapma, minimum ve diğer metrikleri gösterir. Son olarak, boole sütunumuzla ilgili bebeğin cinsiyetini gösteren bazı veriler elde edelim. Bu işlemi Pandas value_counts yöntemiyle yapabiliriz:

df['is_male'].value_counts()

Veri kümesinin cinsiyete göre neredeyse 50/50 dengeli olduğu görülüyor.

2. Adım: Veri kümesini eğitim için hazırlayın

Artık veri kümesini Pandas DataFrame olarak not defterimize indirdiğimize göre biraz ön işleme gerçekleştirip eğitim ve test kümelerine ayırabiliriz.

İlk olarak veri kümesinden boş değer içeren satırları sürükleyip bırakalım ve verileri karıştıralım:

df = df.dropna()
df = shuffle(df, random_state=2)

Daha sonra, etiket sütununu ayrı bir değişkene çıkarın ve yalnızca bizim özelliklerimizi kullanarak bir DataFrame oluşturun. is_male bir boole değeri olduğundan, modelimize yapılan tüm girişlerin sayısal olması için bu değeri tam sayıya dönüştüreceğiz:

labels = df['weight_pounds']
data = df.drop(columns=['weight_pounds'])
data['is_male'] = data['is_male'].astype(int)

Şimdi data.head() çalıştırarak veri kümemizi önizlerseniz eğitimde kullanacağımız dört özelliği göreceksiniz.

4. Git'i başlat

AI Platform Notebooks, git ile doğrudan entegrasyona sahiptir. Böylece doğrudan not defteri ortamınızda sürüm kontrolü yapabilirsiniz. Bu özellik, doğrudan not defteri kullanıcı arayüzünden veya JupyterLab'de bulunan Terminal üzerinden kod kaydetmeyi destekler. Bu bölümde not defterimizde bir git deposunu başlatacak ve kullanıcı arayüzü üzerinden ilk kaydımızı gerçekleştireceğiz.

1. Adım: Git deposunu başlatın

Codelab dizininizde Git'i ve ardından JupyterLab'in üst menü çubuğunda Init'i seçin:

d9f1729358f18e58.png

Bu dizini bir Git Deposu yapmak isteyip istemediğiniz sorulduğunda Yes'i (Evet) seçin. Ardından, dosyalarınızın ve kaydetmelerinizin durumunu görmek için sol kenar çubuğunda Git simgesini seçin:

1648d6828f11a6db.png

2. adım: İlk kaydınızı yapın

Bu kullanıcı arayüzünde bir kayda dosya ekleyebilir, dosya farklılıklarını görebilir (bu konuya daha sonra değineceğiz) ve değişikliklerinizi uygulayabilirsiniz. Az önce eklediğimiz not defteri dosyasını hazırlayarak başlayalım.

Kaydetmede hazırlamak için demo.ipynb not defteri dosyanızın yanındaki kutuyu işaretleyin (.ipynb_checkpoints/ dizinini yoksayabilirsiniz). Metin kutusuna bir kayıt mesajı girin ve değişikliklerinizi kaydetmek için onay işaretini tıklayın:

fe7366522a3a268f.png

İstendiğinde adınızı ve e-posta adresinizi girin. Ardından ilk kaydınızı görmek için Geçmiş sekmesine geri dönün:

d03567c3592afb77.png

Bu laboratuvarın yayınlanmasından sonraki güncellemeler nedeniyle ekran görüntülerinin kullanıcı arayüzünüzle tam olarak eşleşmeyebileceğini hatırlatmak isteriz.

5. TensorFlow modeli oluşturma ve eğitme

Bebek ağırlığını tahmin eden bir model oluşturmak için not defterimize indirdiğimiz BigQuery doğum oranları veri kümesini kullanacağız. Bu laboratuvarda modelin doğruluğundan çok not defteri araçlarına odaklanacağız.

1. Adım: Verilerinizi eğitim ve test kümelerine ayırın

Modelimizi oluşturmadan önce verilerimizi bölmek için Scikit Learn train_test_split yardımcı programını kullanacağız:

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

Artık TensorFlow modelimizi oluşturmaya hazırız.

2. Adım: TensorFlow modelini oluşturun ve eğitin

Bu modeli, modelimizi bir katman yığını olarak tanımlamamıza olanak tanıyan tf.keras Sequential model API'sini kullanarak oluşturacağız. Modelimizi oluşturmak için gereken tüm kodları burada bulabilirsiniz:

model = Sequential([
    Dense(64, activation='relu', input_shape=(len(x_train.iloc[0]),)),
    Dense(32, activation='relu'),
    Dense(1)]
)

Ardından, modelimizi derleyerek eğiteceğiz. Burada, modelin optimize edicisini, kayıp işlevini ve eğitim sırasında kaydetmesini istediğimiz metrikleri seçeceğiz. Bu bir regresyon modeli (sayısal bir değer tahmin etme) olduğundan, metrik olarak doğruluk yerine ortalama karesel hata kullanıyoruz:

model.compile(optimizer=tf.keras.optimizers.RMSprop(),
              loss=tf.keras.losses.MeanSquaredError(),
              metrics=['mae', 'mse'])

Modelinizin her bir katmandaki eğitilebilir parametrelerinin sayısını ve şeklini görmek için Keras'ın kullanışlı model.summary() işlevini kullanabilirsiniz.

Şimdi modelimizi eğitmeye hazırız. Tek yapmamız gereken fit() yöntemini çağırarak eğitim verilerimizi ve etiketlerimizi iletmek. Burada, her adımda modeli doğrulamak için eğitim verilerimizin bir kısmını tutan isteğe bağlı verification_split parametresini kullanacağız. İdeal olan, eğitim ve doğrulama kaybının her ikisinin de azaldığını görmektir. Ancak bu örnekte model kalitesinden çok model ve not defteri araçlarına odaklandığımızı unutmayın:

model.fit(x_train, y_train, epochs=10, validation_split=0.1)

3. Adım: Test örnekleri hakkında tahminler oluşturma

Modelimizin nasıl performans gösterdiğini anlamak için test veri kümemizden ilk 10 örnek üzerinde bazı test tahminleri oluşturalım.

num_examples = 10
predictions = model.predict(x_test[:num_examples])

Ardından, modelimizin tahminlerini tekrar eder ve bu tahminleri gerçek değerle karşılaştırırız:

for i in range(num_examples):
    print('Predicted val: ', predictions[i][0])
    print('Actual val: ',y_test.iloc[i])
    print()

4. Adım: Git diff'i kullanın ve değişikliklerinizi kaydedin

Artık not defterinde bazı değişiklikler yaptığınıza göre, Notebooks git kullanıcı arayüzünde bulunan git diff özelliğini deneyebilirsiniz. demo.ipynb not defteri artık "Değiştirildi" bölümünün altında olur bölümünde bulabilirsiniz. Fareyle dosya adının üzerine gelin ve fark simgesini tıklayın:

a370facb3632fb32.png

Bunu yaptığınızda, değişikliklerinizin aşağıdaki gibi farklarını görebilirsiniz:

461c502bd3ab910e.png

Bu kez, değişikliklerimizi Terminal'i kullanarak komut satırı üzerinden uygulayacağız. JupyterLab üst menü çubuğundaki Git menüsünde, Terminal'de Git Komutu'nu seçin. Aşağıdaki komutları çalıştırırken sol kenar çubuğunuzun git sekmesi açıksa değişikliklerinizin git kullanıcı arayüzüne yansıdığını görebilirsiniz.

Yeni terminal örneğinizde, not defteri dosyanızı kayıt için hazırlamak üzere aşağıdaki komutu çalıştırın:

git add demo.ipynb

Ardından değişikliklerinizi kaydetmek için aşağıdaki komutu çalıştırın (istediğiniz kaydetme mesajını kullanabilirsiniz):

git commit -m "Build and train TF model"

Ardından, geçmişte en son kaydınızı görürsünüz:

a4b44045e97cb7a7.png

6. What-If Aracı'nı doğrudan not defterinizden kullanma

What-If Aracı, veri kümelerinizi görselleştirmenize ve makine öğrenimi modellerinizin sonucunu daha iyi anlamanıza yardımcı olmak için tasarlanmış etkileşimli bir görsel arayüzdür. Google'daki PAIR ekibi tarafından oluşturulan açık kaynak bir araçtır. Her türden modelle kullanılabilse de Cloud AI Platform için özel olarak oluşturulmuş bazı özelliklere sahiptir.

What-If Aracı, TensorFlow ile Cloud AI Platform Notebooks örneklerinde önceden yüklü olarak gelir. Burada, modelimizin genel olarak nasıl bir performans gösterdiğini görmek ve test grubumuzdaki veri noktalarında davranışını incelemek için bu raporu kullanacağız.

1. Adım: What-If Aracı için verileri hazırlayın

What-If Aracı'ndan en iyi şekilde yararlanmak için araca, test grubumuzdan örnekler ile birlikte bu örnekler için kesin referans etiketleri göndereceğiz (y_test). Bu şekilde, modelimizin tahminini gerçek doğruyla karşılaştırabiliriz. Test örneklerimizi ve etiketlerini içeren yeni bir DataFrame oluşturmak için aşağıdaki kod satırını çalıştırın:

wit_data = pd.concat([x_test, y_test], axis=1)

Bu laboratuvarda, What-If Aracı'nı az önce not defterimizde eğittiğimiz modele bağlayacağız. Bunu yapmak için, aracın bu test veri noktalarını modelimizde çalıştırmak üzere kullanacağı bir işlev yazmamız gerekir:

def custom_predict(examples_to_infer):
    preds = model.predict(examples_to_infer)
    return preds

2. Adım: What-If Aracı'nı örneklendirin

Birleştirilmiş test veri kümesi ve az önce oluşturduğumuz kesin referans etiketlerinden 500 örnek ileterek What-If Aracı'nı örneklendireceğiz. Aracı kurmak için WitConfigBuilder örneği oluştururuz. Bunu verilerimizi, yukarıda tanımladığımız özel tahmin işlevini, hedefimizi (tahmin ettiğimiz şey) ve model türünü iletiriz:

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)

What-If Aracı yüklendiğinde aşağıdakine benzer bir sonuç görürsünüz:

fcdc1cb7ed8e364e.png

X ekseninde test veri noktalarınızın, modelin tahmini ağırlık değerine (weight_pounds) göre dağılımını görebilirsiniz.

3. Adım: What-If Aracı'nı kullanarak model davranışını keşfedin

What-If Aracı ile yapabileceğiniz birçok etkileyici şey var. Bunlardan birkaçını burada ele alacağız. İlk olarak veri noktası düzenleyiciyi inceleyelim. Herhangi bir veri noktasını seçerek özelliklerini görebilir ve özellik değerlerini değiştirebilirsiniz. Herhangi bir veri noktasını tıklayarak başlayın:

2ba944f16240ff4b.png

Solda, seçtiğiniz veri noktasının özellik değerlerini görürsünüz. Ayrıca, söz konusu veri noktasının kesin referans etiketini model tarafından tahmin edilen değerle karşılaştırabilirsiniz. Ayrıca, sol kenar çubuğunda özellik değerlerini değiştirebilir ve bu değişikliğin modeliniz üzerindeki etkisini görmek için model tahminini yeniden çalıştırabilirsiniz. Örneğin, tahmini yeniden çalıştırmak için üzerine çift tıklayarak bu veri noktası için gestation_weeks değerini 30 olarak değiştirebiliriz:

aaa6a937c66758cf.png

What-If Aracı'nın olay bölümündeki açılır menüleri kullanarak, her türden özel görselleştirme oluşturabilirsiniz. Örneğin, aşağıda modellerin yer aldığı bir grafik x eksenindeki tahmini ağırlık, y eksenindeki annenin yaşı ve çıkarım hatasıyla renklenen noktalar (daha koyu, tahmin edilen ve gerçek ağırlık arasında daha yüksek fark anlamına gelir). Burada, ağırlık azaldıkça modelin hatasının biraz arttığı görülüyor:

cd2ce527a9044e7b.png

Ardından soldaki Kısmi bağımlılık grafikleri düğmesini işaretleyin. Bu, her bir özelliğin modelin tahminini nasıl etkilediğini gösterir. Örneğin, gebelik süresi arttıkça modelimizin tahmini bebek ağırlığı da artar:

1fec2a64fb03f432.png

What-If Aracı'nı kullanarak daha fazla keşifle ilgili fikir için bu bölümün başındaki bağlantılara göz atın.

7. İsteğe bağlı: Yerel git deponuzu GitHub'a bağlayın

Son olarak, not defteri örneğimizdeki git deposunu GitHub hesabımızdaki bir kod deposuna nasıl bağlayacağımızı öğreneceğiz. Bu adımı gerçekleştirmek istiyorsanız bir GitHub hesabına ihtiyacınız olacaktır.

1. Adım: GitHub'da yeni bir depo oluşturun

GitHub hesabınızda yeni bir depo oluşturun. Bir ad ve açıklama girin, herkese açık olmasını isteyip istemediğinize karar verin ve Kod deposu oluştur'u seçin (BENİOKU(BENİOKU) ile ilk kullanıma hazırlamanız gerekmez. Sonraki sayfada, komut satırından mevcut bir depoyu aktarma talimatlarını uygulayacaksınız.

Bir Terminal penceresi açın ve yeni deponuzu uzaktan kumanda olarak ekleyin. Aşağıdaki depo URL'sindeki username değerini GitHub kullanıcı adınızla, your-repo kısmını az önce oluşturduğunuz adla değiştirin:

git remote add origin git@github.com:username/your-repo.git

2. Adım: Not defteri örneğinizde GitHub ile kimlik doğrulayın

Ardından, not defteri örneğinizden GitHub'da kimlik doğrulaması yapmanız gerekir. Bu işlem, GitHub'da iki faktörlü kimlik doğrulamayı etkinleştirip etkinleştirmediğinize bağlı olarak değişir.

Nereden başlayacağınızdan emin değilseniz SSH anahtarı oluşturmak için GitHub dokümanlarındaki adımları uygulayın, ardından yeni anahtarı GitHub'a ekleyin.

3. adım: GitHub deponuzu doğru şekilde bağladığınızdan emin olun

Kurulum işleminin doğru olduğundan emin olmak için terminalinizde git remote -v komutunu çalıştırın. Yeni deponuzu "remote" olarak listelenmiş olarak göreceksiniz. GitHub deponuzun URL'sini gördüğünüzde ve not defterinizden GitHub'da kimliğinizi doğruladıktan sonra not defteri örneğinizden doğrudan GitHub'a aktarmaya hazırsınız demektir.

Yerel not defteri git deponuzu yeni oluşturulan GitHub deponuzla senkronize etmek için Git kenar çubuğunun üst kısmındaki bulut yükleme düğmesini tıklayın:

eec001587bb9cfb1.png

GitHub deponuzu yenilediğinizde not defteri kodunuzu önceki kayıtlarınızda görebilirsiniz. GitHub deponuza erişimi olan başka kullanıcılar varsa ve not defterinizdeki en son değişiklikleri almak isterseniz bu değişiklikleri senkronize etmek için bulut indirme simgesini tıklayın.

Not defterleri git arayüzünün Geçmiş sekmesinde, yerel kaydetmelerinizin GitHub ile senkronize edilip edilmediğini görebilirsiniz. Bu örnekte origin/master, GitHub'daki depomuza karşılık gelir:

2c3d1eb7cf95c24e.png

Yeni kayıt yaptığınızda, değişiklikleri GitHub deponuza aktarmak için buluta yükleme düğmesine tekrar basmanız yeterlidir.

8. Tebrikler!

Bu laboratuvarda çok şey yaptınız 👏👏

Özetlemek gerekirse şunları öğrendiniz:

  • Özelleştirilmiş bir AI Platform Notebooks örneği oluşturma
  • Bu örnekte yerel bir git deposunu başlatın, git kullanıcı arayüzü veya komut satırı aracılığıyla kaydetme ekleyin, Not Defteri git kullanıcı arayüzünde git diff'lerini görüntüleyin
  • Basit bir TensorFlow 2 modeli oluşturma ve eğitme
  • Notebook örneğinizdeki What-If Aracı'nı kullanma
  • Notebook git deponuzu GitHub'daki harici bir depoya bağlayın

9. Temizleme

Bu not defterini kullanmaya devam etmek istiyorsanız, kullanılmadığında devre dışı bırakmanız önerilir. Cloud Console'daki Not Defteri kullanıcı arayüzünden not defterini ve ardından Durdur'u seçin:

ba727f9a0aefbc30.png

Bu laboratuvarda oluşturduğunuz tüm kaynakları silmek istiyorsanız not defteri örneğini durdurmak yerine silin.

Cloud Console'daki gezinme menüsünü kullanarak Storage'a gidin ve model öğelerinizi depolamak için oluşturduğunuz her iki paketi de silin.