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:
Ö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ı 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:
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:
Örneği açtığınızda codelab adlı yeni bir dizin oluşturun. Bu laboratuvar boyunca çalışacağımız dizin:
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:
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:
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:
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:
İ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:
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:
Bu sayede, değişikliklerinizin karşılaştırmasını görebilirsiniz. Örneğin:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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.