1. Genel Bakış
Bu laboratuvarda, verilerinizi keşfetmek ve makine öğrenimi modellerinin prototipini oluşturmak için AI Platform Notebooks'taki çeşitli araçlar hakkında bilgi edineceksiniz.
Öğ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ıyla ilgili ayrıntılı bilgilere buradan ulaşabilirsiniz.
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 vardır. Proje oluşturmak için buradaki talimatları uygulayın.
2. adım: Compute Engine API'yi etkinleştirin
Compute Engine'e gidin ve henüz etkinleştirilmemişse Etkinleştir'i seçin. Not defteri örneğinizi oluşturmak için bu bilgiye 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 New Instance'ı (Yeni Örnek) tıklayın. Ardından, en son TensorFlow 2 Enterprise örnek türünü GPU'suz olarak seçin:

Ö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:

AI Platform Not Defterleri'nde, örneğinizin dağıtıldığı bölge, resim 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ı kullanırız. Makine yapılandırması için n1-standard-8 makinesini kullanacağız:

GPU eklenmez ve önyükleme diski, ağ ve izin için varsayılan ayarlar kullanılır. Örneğinizi oluşturmak için Oluştur'u seçin. Bu işlemin tamamlanması birkaç dakika sürer.
Örnek oluşturulduktan sonra Notebooks kullanıcı arayüzünde örneğin yanında yeşil bir onay işareti görürsünüz. Örneğinizi açmak ve prototip oluşturmaya başlamak için JupyterLab'i aç'ı seçin:

Örneği açtığınızda codelab adlı yeni bir dizin oluşturun. Bu laboratuvar boyunca çalışacağımız dizin:

Çift tıklayarak yeni oluşturduğunuz codelab dizinini açın ve başlatıcıdan Python 3 not defterini seçin:

Not defterini demo.ipynb olarak veya istediğiniz başka 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 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, keşfetmeniz 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 natality veri kümesini kullanacağız. Bu veri kümesi, ABD'de 40 yıllık bir süre zarfında gerçekleşen neredeyse tüm doğumlarla ilgili verileri içerir. Bu verilere çocuğun doğum ağırlığı ve bebeğin ebeveynleriyle ilgili demografik bilgiler dahildir. 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 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 basit tutmak için veri kümesinden yalnızca 10.000 satır kullanacağız.
Aşağıdaki kodu kullanarak sorguyu oluşturun ve sonuçta elde edilen DataFrame'i önizleyin. Burada, modelimizin tahmin edeceği bebek ağırlığının yanı sıra orijinal veri kümesinden 4 özellik alıyoruz. Veri kümesi çok eski yıllara dayanıyor 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 kodu çalıştırın:
df.describe()
Bu, sayısal sütunlarımız için ortalamayı, standart sapmayı, minimum değeri ve diğer metrikleri gösterir. Son olarak, bebeğin cinsiyetini belirten boolean sütunumuzla ilgili bazı veriler alalım. Bunu Pandas value_counts yöntemiyle yapabiliriz:
df['is_male'].value_counts()
Veri kümesi, cinsiyete göre neredeyse eşit (50/50) dağılmış durumda.
2. adım: Veri kümesini eğitime hazırlayın
Veri kümesini Pandas DataFrame olarak not defterimize indirdiğimize göre, ön işleme yapabilir ve eğitim ile test kümelerine bölebiliriz.
Öncelikle, veri kümesinden boş değer içeren satırları çıkaralım ve verileri karıştıralım:
df = df.dropna()
df = shuffle(df, random_state=2)
Ardından, etiket sütununu ayrı bir değişkene çıkarın ve yalnızca özelliklerimizi içeren bir DataFrame oluşturun. is_male bir boole değeri olduğundan, modelimize yapılan tüm girişlerin sayısal olması için bunu 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örmeniz gerekir.
4. Git'i başlatma
AI Platform Notebooks, git ile doğrudan entegrasyona sahiptir. Böylece, sürüm denetimini doğrudan not defteri ortamınızda yapabilirsiniz. Bu özellik, kodu doğrudan not defteri kullanıcı arayüzünde veya JupyterLab'de bulunan terminal üzerinden işlemeyi 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: Git deposunu başlatın
Codelab dizininizde Git'i ve ardından JupyterLab'deki üst menü çubuğundan Init'i seçin:

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

2. adım: İlk commit'inizi yapın
Bu kullanıcı arayüzünde, bir işleme dosya ekleyebilir, dosya farklılıklarını görebilir (buna daha sonra değineceğiz) ve değişikliklerinizi işleyebilirsiniz. Öncelikle az önce eklediğimiz not defteri dosyasını kaydederek başlayalım.
demo.ipynb not defteri dosyanızın yanındaki kutuyu işaretleyerek dosyayı commit işlemine hazırlayın (.ipynb_checkpoints/ dizinini yoksayabilirsiniz). Metin kutusuna bir commit mesajı girin ve ardından değişikliklerinizi commit etmek için onay işaretini tıklayın:

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

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ğundan ziyade 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'yi kullanarak oluşturacağız. Modelimizi oluşturmak için gereken tüm kodlar burada yer almaktadır:
model = Sequential([
Dense(64, activation='relu', input_shape=(len(x_train.iloc[0]),)),
Dense(32, activation='relu'),
Dense(1)]
)
Ardından, modelimizi eğitebilmek için derleyeceğiz. Burada modelin optimize edicisini, kayıp fonksiyonunu ve eğitim sırasında modelin kaydetmesini istediğimiz metrikleri seçeceğiz. Bu bir regresyon modeli (sayısal bir değeri tahmin eder) olduğundan, metrik olarak doğruluk yerine ortalama karesel hatayı kullanıyoruz:
model.compile(optimizer=tf.keras.optimizers.RMSprop(),
loss=tf.keras.losses.MeanSquaredError(),
metrics=['mae', 'mse'])
Modelinizin her katmandaki şeklini ve eğitilebilir parametre sayısını görmek için Keras'ın kullanışlı model.summary() işlevini kullanabilirsiniz.
Artık modelimizi eğitmeye hazırız. Eğitim verilerimizi ve etiketlerimizi ileterek fit() yöntemini çağırmamız yeterlidir. Burada, her adımda modeli doğrulamak için eğitim verilerimizin bir kısmını tutacak olan isteğe bağlı validation_split parametresini kullanacağız. İdeal olarak, eğitim ve doğrulama kaybının her ikisinin de azaldığını görmek istersiniz. Ancak bu örnekte model kalitesinden ziyade 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 üzerinde tahminler oluşturun
Modelimizin nasıl performans gösterdiğini görmek için test veri kümemizdeki ilk 10 örnek üzerinde 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 yinelemeler yapacağı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 işleyin
Not defterinde bazı değişiklikler yaptığınıza göre, Not Defterleri 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. Dosya adının üzerine gelip farklılık simgesini tıklayın:

Bu işlemden sonra, değişikliklerinizin farkını aşağıdaki gibi görebilirsiniz:

Bu kez değişikliklerimizi Terminal'i kullanarak komut satırından işleyeceğiz. JupyterLab üst menü çubuğundaki Git menüsünden Git Command in Terminal'i (Terminalde Git Komutu) 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ı commit işlemine hazırlamak için aşağıdaki komutu çalıştırın:
git add demo.ipynb
Ardından, değişikliklerinizi işlemek için aşağıdakileri ç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 işlemeyi görmeniz gerekir:

6. What-If Aracı'nı doğrudan not defterinizden kullanma
What-If Aracı, veri kümelerinizi görselleştirmenize ve makine öğrenimi modellerinizin çıkışını daha iyi anlamanıza yardımcı olmak için tasarlanmış etkileşimli bir görsel arayüzdür. Bu araç, Google'daki PAIR ekibi tarafından oluşturulan açık kaynaklı bir araçtır. Her tür modelle çalışsa da yalnızca Cloud AI Platform için geliştirilmiş bazı özellikleri vardır.
What-If Aracı, TensorFlow ile Cloud AI Platform Notebooks örneklerinde önceden yüklenmiş olarak gelir. Burada, modelimizin genel olarak nasıl performans gösterdiğini görmek ve test setimizdeki veri noktaları üzerindeki davranışını incelemek için bu metriği kullanacağız.
1. adım: What-If Aracı için verileri hazırlayın
What-If Aracı'ndan en iyi şekilde yararlanmak için test setimizdeki örnekleri, bu örneklerin kesin referans etiketleriyle birlikte (y_test) göndeririz. Böylece modelimizin tahminlerini gerçek doğruyla 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, What-If Aracı'nı not defterimizde yeni 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ı başlatın
Birleştirilmiş test veri kümesinden ve az önce oluşturduğumuz kesin referans etiketlerinden 500 örnek ileterek What-If Aracı'nı başlatacağız. Aracı ayarlamak için WitConfigBuilder örneği oluştururuz. Verilerimizi, yukarıda tanımladığımız özel tahmin işlevini, hedefimizi (tahmin ettiğimiz şey) ve model türünü bu örneğe 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 ekran görürsünüz:

X ekseninde, test verilerinizin modelin tahmin ettiği ağırlık değerine göre dağılımını görebilirsiniz weight_pounds.
3. adım: What-If Aracı ile model davranışını keşfedin
What-If Aracı ile yapabileceğiniz birçok harika şey var. Burada bunlardan yalnızca birkaçını inceleyeceğiz. Öncelikle veri noktası düzenleyiciye bakalım. Özelliklerini görmek ve özellik değerlerini değiştirmek için herhangi bir veri noktasını seçebilirsiniz. Herhangi bir veri noktasını tıklayarak başlayın:

Sol tarafta, 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 modelin tahmin ettiği 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ı için gestation_weeks değerini 30 olarak değiştirmek üzere bu veri noktasını çift tıklayıp tahmini yeniden çalıştırabiliriz:

Ne Olursa Aracı'nın grafik bölümündeki açılır menüleri kullanarak her türlü özel görselleştirmeyi oluşturabilirsiniz. Örneğin, aşağıdaki grafikte modellerin tahmin ettiği ağırlık x ekseninde, annenin yaşı y ekseninde gösterilmektedir. Noktalar, çıkarım hatalarına göre renklendirilmiştir (daha koyu renk, tahmin edilen ve gerçek ağırlık arasındaki farkın daha yüksek olduğunu gösterir). 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 tahmini üzerindeki etkisini gösterir. Örneğin, gebelik süresi arttıkça modelimizin tahmin ettiği bebek ağırlığı da artar:

What-If Aracı ile ilgili daha fazla keşif fikri için bu bölümün başındaki bağlantıları inceleyin.
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 istiyorsanız 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. Ad ve açıklama girin, herkese açık olmasını isteyip istemediğinize karar verin ve Depo oluştur'u seçin (README ile başlatmanız gerekmez). Sonraki sayfada, komut satırından mevcut bir depoyu gönderme talimatlarını uygulayacaksınız.
Bir terminal penceresi açın ve yeni deponuzu uzak olarak ekleyin. Aşağıdaki depo URL'sinde 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 kimliğinizi doğrulayın
Ardından, not defteri örneğinizden GitHub'da kimliğinizi doğrulamanız gerekir. Bu işlem, GitHub'da iki faktörlü kimlik doğrulamanın etkin olup olmamasına bağlı olarak değişir.
Nereden başlayacağınızdan emin değilseniz GitHub belgelerindeki 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ı doğru yaptığınızdan emin olmak için terminalinizde git remote -v komutunu çalıştırın. Yeni deponuzun remote olarak listelendiğini görmeniz gerekir. GitHub deponuzun URL'sini gördüğünüzde ve not defterinizden GitHub'da kimliğinizi doğruladığınızda, 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 deposuyla senkronize etmek için Git kenar çubuğunun üst kısmındaki buluta yükleme düğmesini tıklayın:

GitHub deponuzu yenilediğinizde not defteri kodunuzu önceki commit'lerinizle birlikte görürsünüz. GitHub deponuza başkaları da erişiyorsa ve not defterinizdeki en son değişiklikleri almak istiyorsanız bu değişiklikleri senkronize etmek için buluttan indirme simgesini tıklayın.
Notebooks git kullanıcı arayüzünün Geçmiş sekmesinde, yerel commit'lerinizin GitHub ile senkronize edilip edilmediğini görebilirsiniz. Bu örnekte, origin/master GitHub'daki depomuzla eşleşir:

Yeni commit'ler oluşturduğunuzda, 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 👏👏👏
Özetle, şunları yapmayı öğrendiniz:
- AI Platform Notebooks örneği oluşturma ve özelleştirme
- Bu örnekte yerel bir Git deposu başlatın, Git kullanıcı arayüzü veya komut satırı üzerinden commit ekleyin, not defteri Git kullanıcı arayüzünde Git farklılıklarını görüntüleyin.
- Basit bir TensorFlow 2 modeli oluşturma ve eğitme
- Notebook ö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ız zamanlarda kapatmanız önerilir. Cloud Console'unuzdaki Notebooks kullanıcı arayüzünde 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 silmeniz yeterlidir.
Cloud Console'daki gezinme menüsünü kullanarak Storage'a gidin ve model varlıklarınızı depolamak için oluşturduğunuz her iki paketi de silin.