AI Platform Notebooks'ta model prototipleri oluşturma

1. Genel Bakış

Bu laboratuvarda, verilerinizi keşfetmek ve makine öğrenimi modellerinin prototipini oluşturmak için AI Platform Not Defterleri'ndeki çeşitli araçlarda size yol gösterilecektir.

Öğrenecekleriniz

Öğrenecekleriniz:

  • AI Platform Notebooks örneği oluşturma ve özelleştirme
  • Doğrudan AI Platform Notebooks'a entegre edilmiş git ile not defteri kodunuzu takip edin
  • Not defterinizde 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 Not Defterleri fiyatlandırması hakkında ayrıntılı bilgiye buradan ulaşabilirsiniz.

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

Bu kod laboratuvarını çalıştırmak için faturalandırmanın etkin olduğu bir Google Cloud Platform projeniz olmalıdır. Proje oluşturmak için buradaki talimatları uygulayın.

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

Compute Engine'a gidin ve etkin değilse Etkinleştir'i seçin. Not defteri örneğinizi oluşturmak için bu anahtara ihtiyacınız vardır.

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

Cloud Console'unuzun AI Platform Notebooks bölümüne gidin ve Yeni Örnek'i tıklayın. Ardından, en son TensorFlow 2 Enterprise örneği türünü GPU'suz olarak seçin:

9f2bb4dec1ba4f4f.png

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

63be602ba45ca7c9.png

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

27101d232f765a17.png

Hiçbir GPU eklemeyiz ve önyükleme diski, ağ ve izin için varsayılanları kullanırı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 Defteri kullanıcı arayüzünde örneğin 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 adlı yeni bir dizin oluşturun. Bu laboratuvar boyunca çalışacağımız dizin:

c16a821546acd92.png

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

4390b1614ae8eae4.png

Not defterini demo.ipynb veya istediğiniz bir adla yeniden adlandırın.

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

Not defterinde yeni bir hücre oluşturun ve bu kod laboratuvarında 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ı olan BigQuery, keşfedebilmeniz için birçok veri kümesini herkese açık hale getirdi. AI Platform Notebooks, kimlik doğrulama gerektirmeden BigQuery ile doğrudan entegrasyonu destekler.

Bu laboratuvarda doğum veri kümesini kullanacağız. Bu veri kümesi, 40 yıllık bir süre boyunca ABD'de gerçekleşen neredeyse her doğumla ilgili verileri (ör. çocuğun doğum ağırlığı ve bebeğin ebeveynleriyle ilgili demografik bilgiler) içerir. 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. İşlemleri basit tutmak için veri kümesinden yalnızca 10.000 satır kullanacağız.

Sorguyu oluşturun ve aşağıdaki kodla elde edilen DataFrame'i önizleyin. Burada, orijinal veri kümesinden 4 özellik ve bebek ağırlığı (modelimizin tahmin edeceği değer) elde ediyoruz. Veri kümesi yıllar öncesine dayanır ancak bu model için yalnızca 2000'den sonraki verileri kullanacağı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 özetini almak için şu komutu çalıştırın:

df.describe()

Bu sayfada, sayısal sütunlarımızın ortalaması, standart sapması, minimum değeri ve diğer metrikleri gösterilmektedir. Son olarak, bebeğin cinsiyetini belirten mantıksal sütunumuzdan bazı veriler alalım. Bunu Pandas value_counts yöntemiyle yapabiliriz:

df['is_male'].value_counts()

Veri kümesinin cinsiyete göre yaklaşık olarak 50/50 oranında dengeli olduğu görülüyor.

2. Adım: Veri kümesini eğitime hazırlama

Veri kümesini Pandas DataFrame olarak not defterimize indirdik. Şimdi bazı ön işlemler yapabilir ve veri kümesini eğitim ve test kümelerine ayırabiliriz.

Öncelikle, veri kümesindeki null değerleri olan satırları bırakıp verileri karıştıralım:

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

Ardından, etiket sütununu ayrı bir değişkene ayıklayın ve yalnızca özelliklerimizi içeren bir DataFrame oluşturun. is_male bir boole olduğundan, modelimize yapılan tüm girişlerin sayısal olması için bunu bir 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() komutunu çalıştırarak veri kümemizi önizlerseniz eğitim için kullanacağımız dört özelliği görürsünüz.

4. git'i başlatma

AI Platform Notebooks, git ile doğrudan entegre olduğundan sürüm kontrolünü doğrudan not defteri ortamınızda yapabilirsiniz. Bu özellik, kodu doğrudan not defteri kullanıcı arayüzünde veya JupyterLab'deki Terminal üzerinden göndermeyi destekler. Bu bölümde, not defterimizde bir git deposu başlatacak ve kullanıcı arayüzü üzerinden ilk commit'imizi yapacağız.

1. Adım: Bir git deposu başlatın

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

d9f1729358f18e58.png

Bu dizini Git deposu yapmak isteyip istemediğiniz sorulduğunda Evet'i seçin. Ardından, dosyalarınızın ve gönderimlerinizin durumunu görmek için sol kenar çubuğundaki Git simgesini seçin:

1648d6828f11a6db.png

2. Adım: İlk commit'inizi yapın

Bu kullanıcı arayüzünde, bir kayda dosya ekleyebilir, dosya karşılaştırmalarını görebilir (bu konuyu daha sonra ele alacağız) ve değişikliklerinizi kaydedebilirsiniz. Az önce eklediğimiz not defteri dosyasını göndererek başlayalım.

demo.ipynb not defteri dosyanızın yanındaki kutuyu işaretleyerek dosyayı kaydetme için hazırlayabilirsiniz (.ipynb_checkpoints/ dizini dikkate alınmaz). Metin kutusuna bir gönderme mesajı girin ve ardından değişikliklerinizi göndermek için onay işaretini tıklayın:

fe7366522a3a268f.png

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

d03567c3592afb77.png

Bu laboratuvar yayınlandıktan sonra yapılan güncellemeler nedeniyle ekran görüntülerinin kullanıcı arayüzünüzle tam olarak eşleşmeyebileceğini unutmayın.

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 veri kümesini kullanacağız. Bu laboratuvarda, modelin doğruluğu yerine not defteri araçlarına odaklanacağız.

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

Modelimizi oluşturmadan önce verileri 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 ihtiyaç duyduğumuz tüm kod buradadır:

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

Ardından, eğitebilmemiz için modelimizi derleyeceğiz. Burada, modelin optimizatörünü, kayıp işlevini ve modelin eğitim sırasında günlüğe kaydetmesini istediğimiz metrikleri seçeceğiz. Bu bir regresyon modeli olduğundan (sayısal bir değeri tahmin eder) metrik olarak doğruluk yerine ortalama kare hata değerini kullanırız:

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

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

Artık modelimizi eğitmeye hazırız. Tek yapmamız gereken, fit() yöntemini çağırarak eğitim verilerimizi ve etiketlerimizi iletmek. Burada, modeli her adımda doğrulamak için eğitim verilerimizin bir kısmını saklayacak olan isteğe bağlı validation_split parametresini kullanacağız. İdeal olarak, hem eğitim hem de doğrulama kaybının azaltılmasını istersiniz. Ancak bu örnekte model kalitesinden çok model ve not defteri araçları üzerinde durduğumuzu unutmayın:

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

3. adım: Test örnekleri için tahminler oluşturun

Modelimizin nasıl performans gösterdiğini görmek için test veri kümemizdeki ilk 10 örnekle ilgili bazı test tahminleri oluşturalım.

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

Ardından, modelimizin tahminlerini gerçek değerle karşılaştırarak iterasyon yaparı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 gönderin

Not defterinde bazı değişiklikler yaptığınıza göre, Not Defteri'nin git kullanıcı arayüzünde bulunan git diff özelliğini deneyebilirsiniz. demo.ipynb not defteri artık kullanıcı arayüzündeki "Değiştirildi" bölümünde yer alır. Fareyle dosya adının üzerine gelip fark simgesini tıklayın:

a370facb3632fb32.png

Bu sayede, değişikliklerinizin karşılaştırmasını görebilirsiniz. Örneğin:

461c502bd3ab910e.png

Bu kez, Terminal'i kullanarak değişikliklerimizi komut satırı üzerinden göndereceğiz. JupyterLab'ın üst menü çubuğundaki Git menüsünden Terminalde 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ıtıldığını görebilirsiniz.

Not defteri dosyanızı kaydetme için hazırlamak üzere yeni terminal örneğinizde aşağıdakileri ç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 commit mesajını kullanabilirsiniz):

git commit -m "Build and train TF model"

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

a4b44045e97cb7a7.png

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

Senaryo Oluşturucu, veri kümelerinizi görselleştirmenize ve makine öğrenimi modellerinizin çıktısını 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ür modelle çalışır ancak yalnızca Cloud AI Platform için özel olarak tasarlanmış bazı özelliklere sahiptir.

What-If Aracı, TensorFlow ile Cloud AI Platform Notebooks örneklerine önceden yüklenmiş olarak gelir. Burada, modelimizin genel performansını görmek ve test veri kümemizdeki veri noktalarında davranışını incelemek için bu aracı kullanacağız.

1. Adım: Verileri Olası Durumlar Aracı için hazırlama

Olasılık Analizi Aracı'ndan en iyi şekilde yararlanmak için test veri kümemizdeki örnekleri ve bu örneklerin kesin referans etiketlerini (y_test) göndeririz. Böylece, modelimizin tahminlerini kesin referansla karşılaştırabiliriz. Test örneklerimiz ve etiketleriyle 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, Olasılıklar Aracı'nı not defterimizde yeni eğitmiş olduğumuz modele bağlayacağız. Bunu yapmak için aracın bu test veri noktalarını modelimizde çalıştırmak için kullanacağı bir işlev yazmamız gerekir:

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

2. Adım: Olasılık Analizi Aracı'nı örneklendirin

Olasılık Analizi Aracı'nı, birleştirilmiş test veri kümesinden 500 örnek ve az önce oluşturduğumuz gerçek doğruluk etiketlerini ileterek örneklendireceğiz. Aracı ayarlamak için WitConfigBuilder örneği oluştururuz. Bu örnekte, verilerimizi, yukarıda tanımladığımız özel tahmin işlevini, hedefimizi (tahmin ettiğimiz öğe) 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)

Gerçekleşebilecek Senaryolar Aracı yüklendiğinde aşağıdakine benzer bir ekran görürsünüz:

fcdc1cb7ed8e364e.png

X ekseninde, test veri noktalarınızın modelin tahmin ettiği ağırlık değerine (weight_pounds) göre dağıldığını görebilirsiniz.

3. adım: What-If Aracı ile model davranışını keşfedin

What-If Aracı ile yapabileceğiniz birçok harika şey var. Bunlardan sadece birkaçını burada inceleyeceğiz. Öncelikle veri noktası düzenleyiciye bakalım. 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

Sol tarafta, seçtiğiniz veri noktasının özellik değerlerini görürsünüz. Bu veri noktasının kesin referans etiketini, model tarafından tahmin edilen değerle de karşılaştırabilirsiniz. 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, bu veri noktasını çift tıklayıp tahmini yeniden çalıştırarak gestation_weeks değerini 30 olarak değiştirebiliriz:

aaa6a937c66758cf.png

Olasılık Analizi Aracı'nın nokta grafiği bölümündeki açılır menüleri kullanarak her türlü özel görselleştirmeyi oluşturabilirsiniz. Örneğin, burada x ekseninde modellerin tahmini ağırlığı, y ekseninde annenin yaşı ve noktaların çıkarım hatalarına göre renklendirildiği bir grafik gösterilmektedir (koyu renkler, tahmin edilen ve gerçek ağırlık arasındaki farkın daha yüksek olduğunu gösterir). 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 noktaları 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 tahmin ettiği bebek ağırlığı da artar:

1fec2a64fb03f432.png

What-If Aracı ile ilgili daha fazla keşif fikri 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 depoya nasıl bağlayacağımızı öğreneceğiz. Bu adımı uygulamak için bir GitHub hesabınız olmalıdır.

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

GitHub hesabınızda yeni bir depo oluşturun. Depoya bir ad ve açıklama girin, herkese açık olup olmayacağını belirleyin ve Depo oluştur'u seçin (README ile başlatmanız gerekmez). Sonraki sayfada, mevcut bir deposu komut satırından yayınlamayla ilgili talimatları uygulayacaksınız.

Bir Terminal penceresi açın ve yeni deponuzu uzak olarak ekleyin. Aşağıdaki depo URL'sindeki username ifadesini GitHub kullanıcı adınızla, your-repo ifadesini ise az önce oluşturduğunuz deponun adıyla değiştirin:

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

2. Adım: Not defteri örneğinizde GitHub'da kimlik doğrulama yapın

Ardından, not defteri örneğinizden GitHub'da kimlik doğrulamanı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 GitHub dokümanlarında yer alan adımları uygulayarak SSH anahtarı oluşturun ve ardından yeni anahtarı GitHub'a ekleyin.

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

Ayarlarınızın doğru olduğundan emin olmak için terminalinizde git remote -v komutunu çalıştırın. Yeni deponuz uzak depo olarak listelenir. GitHub deponuzun URL'sini gördükten ve not defterinizden GitHub'da kimlik doğrulamasını yaptıktan sonra not defteri örneğinizden doğrudan GitHub'a göndermeye hazırsınız demektir.

Yerel not defteri git deponuzu yeni oluşturduğunuz 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, önceki gönderimlerinizi içeren not defteri kodunuzu görürsünüz. GitHub deponuza başka kullanıcıların erişimi varsa ve not defterinize en son değişiklikleri almak istiyorsanız bu değişiklikleri senkronize etmek için bulut indirme simgesini tıklayın.

Not defterleri git kullanıcı arayüzünün Geçmiş sekmesinde, yerel gönderimlerinizin GitHub ile senkronize edilip edilmediğini görebilirsiniz. Bu örnekte origin/master, GitHub'daki repomuzla eşleşir:

2c3d1eb7cf95c24e.png

Yeni birleştirme yaptığınızda, bu değişiklikleri GitHub deponuza göndermek için bulut yükleme düğmesini tekrar tıklamanız yeterlidir.

8. Tebrikler!

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

Özetlemek gerekirse şunları öğrendiniz:

  • AI Platform not defteri örneği oluşturma ve özelleştirme
  • Bu örnekte yerel bir git deposu başlatma, git kullanıcı arayüzü veya komut satırı üzerinden taahhüt ekleme, Not Defteri git kullanıcı arayüzünde git farklarını görüntüleme
  • Basit bir TensorFlow 2 modeli oluşturma ve eğitme
  • Not defteri örneğinizde What-If Aracı'nı kullanma
  • Not defteri git deponuzu GitHub'daki harici bir depoya bağlama

9. Temizleme

Bu not defterini kullanmaya devam etmek istiyorsanız kullanmadığınızda kapatmanız önerilir. Cloud Console'daki Not Defteri kullanıcı arayüzünde 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 silmeniz yeterlidir.

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