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:
Ö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:
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:
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:
Ö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:
Yeni oluşturduğunuz codelab dizinini çift tıklayıp başlatıcıdan Python 3 not defterini seçin:
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:
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:
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:
İ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:
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:
Bunu yaptığınızda, değişikliklerinizin aşağıdaki gibi farklarını görebilirsiniz:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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.