1. Übersicht
In diesem Lab lernen Sie verschiedene Tools in AI Platform Notebooks kennen, mit denen Sie Ihre Daten untersuchen und ML-Modelle prototypisieren können.
Lerninhalte
Die folgenden Themen werden behandelt:
- AI Platform Notebooks-Instanz erstellen und anpassen
- Notebook-Code mit Git verfolgen, direkt in AI Platform Notebooks integriert
- What-If-Tool in Ihrem Notebook verwenden
Die Gesamtkosten für die Ausführung dieses Labs in Google Cloud betragen etwa 1$. Weitere Informationen zu den Preisen für AI Platform Notebooks
2. AI Platform Notebooks-Instanz erstellen
Für dieses Codelab benötigen Sie ein Google Cloud Platform-Projekt mit aktivierter Abrechnung. Folgen Sie dieser Anleitung, um ein Projekt zu erstellen.
Schritt 2: Compute Engine API aktivieren
Rufen Sie Compute Engine auf und wählen Sie Aktivieren aus, falls die API noch nicht aktiviert ist. Sie benötigen diese, um Ihre Notebook-Instanz zu erstellen.
Schritt 3: Notebook-Instanz erstellen
Rufen Sie in der Cloud Console den Abschnitt „AI Platform Notebooks“ auf und klicken Sie auf Neue Instanz. Wählen Sie dann den aktuellen Instanztyp TensorFlow 2 Enterprise ohne GPUs aus:

Geben Sie Ihrer Instanz einen Namen oder verwenden Sie den Standardnamen. Anschließend sehen wir uns die Anpassungsoptionen an. Klicken Sie auf die Schaltfläche Anpassen:

AI Platform Notebooks bietet viele verschiedene Anpassungsoptionen, darunter die Region, in der Ihre Instanz bereitgestellt wird, den Imagetyp, die Maschinengröße und die Anzahl der GPUs. Wir verwenden die Standardeinstellungen für Region und Umgebung. Für die Maschinenkonfiguration verwenden wir eine n1-standard-8-Maschine:

Wir fügen keine GPUs hinzu und verwenden die Standardeinstellungen für Bootlaufwerk, Netzwerk und Berechtigung. Wählen Sie Erstellen aus, um die Instanz zu erstellen. Das dauert einige Minuten.
Wenn die Instanz erstellt wurde, wird in der Notebooks-Benutzeroberfläche ein grünes Häkchen daneben angezeigt. Wählen Sie JupyterLab öffnen aus, um Ihre Instanz zu öffnen und mit dem Prototyping zu beginnen:

Erstellen Sie beim Öffnen der Instanz ein neues Verzeichnis mit dem Namen „codelab“. Das ist das Verzeichnis, in dem wir in diesem Lab arbeiten:

Klicken Sie doppelt auf das neu erstellte Verzeichnis codelab und wählen Sie dann im Launcher das Python 3-Notebook aus:

Benennen Sie das Notebook in demo.ipynb oder einen anderen Namen um.
Schritt 4: Python-Pakete importieren
Erstellen Sie eine neue Zelle im Notebook und importieren Sie die Bibliotheken, die wir in diesem Codelab verwenden werden:
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-Daten mit Ihrem Notebook verbinden
In BigQuery, dem Big Data Warehouse von Google Cloud, sind viele Datasets öffentlich verfügbar. AI Platform Notebooks unterstützen die direkte Integration in BigQuery ohne Authentifizierung.
In diesem Lab verwenden wir das Dataset „Natality“ (Geburtenrate). Sie enthält Daten zu fast jeder Geburt in den USA über einen Zeitraum von 40 Jahren, einschließlich des Geburtsgewichts des Kindes und demografischer Informationen zu den Eltern. Wir verwenden eine Teilmenge der Merkmale, um das Geburtsgewicht eines Babys vorherzusagen.
Schritt 1: BigQuery-Daten in unser Notebook herunterladen
Wir verwenden die Python-Clientbibliothek für BigQuery, um die Daten in einen Pandas-DataFrame herunterzuladen. Das ursprüngliche Dataset ist 21 GB groß und enthält 123 Millionen Zeilen. Der Einfachheit halber verwenden wir nur 10.000 Zeilen aus dem Dataset.
Erstellen Sie die Abfrage und rufen Sie mit dem folgenden Code eine Vorschau des resultierenden DataFrames auf. Hier erhalten wir vier Merkmale aus dem ursprünglichen Dataset sowie das Gewicht des Babys (das unser Modell vorhersagen wird). Der Datensatz reicht viele Jahre zurück, aber für dieses Modell verwenden wir nur Daten ab dem Jahr 2000:
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()
Um eine Zusammenfassung der numerischen Features in unserem Dataset zu erhalten, führen Sie Folgendes aus:
df.describe()
Hier sehen wir den Mittelwert, die Standardabweichung, das Minimum und andere Messwerte für unsere numerischen Spalten. Zum Schluss holen wir noch einige Daten zur booleschen Spalte ab, die das Geschlecht des Babys angibt. Dazu können wir die Pandas-Methode value_counts verwenden:
df['is_male'].value_counts()
Das Dataset ist anscheinend nach Geschlecht fast ausgeglichen (50/50).
Schritt 2: Dataset für das Training vorbereiten
Nachdem wir das Dataset als Pandas DataFrame in unser Notebook heruntergeladen haben, können wir es vorverarbeiten und in Trainings- und Testsets aufteilen.
Zuerst entfernen wir Zeilen mit Nullwerten aus dem Datensatz und mischen die Daten:
df = df.dropna()
df = shuffle(df, random_state=2)
Als Nächstes extrahieren wir die Labelspalte in eine separate Variable und erstellen einen DataFrame mit nur unseren Features. Da is_male ein boolescher Wert ist, wandeln wir ihn in eine Ganzzahl um, damit alle Eingaben für unser Modell numerisch sind:
labels = df['weight_pounds']
data = df.drop(columns=['weight_pounds'])
data['is_male'] = data['is_male'].astype(int)
Wenn Sie das Dataset jetzt mit data.head() in der Vorschau ansehen, sollten die vier Features angezeigt werden, die wir für das Training verwenden.
4. Git initialisieren
AI Platform Notebooks ist direkt in Git eingebunden, sodass Sie die Versionsverwaltung direkt in Ihrer Notebook-Umgebung durchführen können. So können Sie Code direkt über die Notebook-UI oder über das in JupyterLab verfügbare Terminal committen. In diesem Abschnitt initialisieren wir ein Git-Repository in unserem Notebook und führen unseren ersten Commit über die Benutzeroberfläche aus.
Schritt 1: Git-Repository initialisieren
Wählen Sie in Ihrem Codelab-Verzeichnis in der oberen Menüleiste von JupyterLab Git und dann Init aus:

Wenn Sie gefragt werden, ob Sie dieses Verzeichnis in ein Git-Repository umwandeln möchten, wählen Sie Ja aus. Wählen Sie dann in der linken Seitenleiste das Git-Symbol aus, um den Status Ihrer Dateien und Commits zu sehen:

Schritt 2: Ersten Commit ausführen
In dieser Benutzeroberfläche können Sie Dateien zu einem Commit hinzufügen, Dateidifferenzen ansehen (dazu kommen wir später) und Ihre Änderungen committen. Wir beginnen damit, die gerade hinzugefügte Notebook-Datei zu committen.
Klicken Sie das Kästchen neben Ihrer demo.ipynb-Notebookdatei an, um sie für den Commit vorzubereiten. Das Verzeichnis .ipynb_checkpoints/ können Sie ignorieren. Geben Sie eine Commit-Nachricht in das Textfeld ein und klicken Sie dann auf das Häkchen, um die Änderungen zu committen:

Geben Sie Ihren Namen und Ihre E-Mail-Adresse ein, wenn Sie dazu aufgefordert werden. Kehren Sie dann zum Tab Verlauf zurück, um Ihren ersten Commit zu sehen:

Hinweis: Die Screenshots stimmen aufgrund von Aktualisierungen seit der Veröffentlichung dieses Labs möglicherweise nicht genau mit Ihrer Benutzeroberfläche überein.
5. TensorFlow-Modell erstellen und trainieren
Wir verwenden das BigQuery-Dataset zur Geburtenrate, das wir in unser Notebook heruntergeladen haben, um ein Modell zu erstellen, das das Gewicht von Babys vorhersagt. In diesem Lab konzentrieren wir uns auf die Notebook-Tools und nicht auf die Genauigkeit des Modells selbst.
Schritt 1: Daten in Trainings- und Test-Datasets aufteilen
Wir verwenden das Scikit-Learn-Dienstprogramm train_test_split, um unsere Daten aufzuteilen, bevor wir unser Modell erstellen:
x,y = data,labels
x_train,x_test,y_train,y_test = train_test_split(x,y)
Jetzt können wir unser TensorFlow-Modell erstellen.
Schritt 2: TensorFlow-Modell erstellen und trainieren
Wir erstellen dieses Modell mit der tf.keras-Modell-API Sequential, mit der wir unser Modell als Stapel von Layern definieren können. Hier finden Sie den gesamten Code, den wir zum Erstellen unseres Modells benötigen:
model = Sequential([
Dense(64, activation='relu', input_shape=(len(x_train.iloc[0]),)),
Dense(32, activation='relu'),
Dense(1)]
)
Anschließend kompilieren wir das Modell, damit wir es trainieren können. Hier wählen wir das Optimierungstool, die Verlustfunktion und die Messwerte des Modells aus, die während des Trainings protokolliert werden sollen. Da es sich um ein Regressionsmodell handelt, mit dem ein numerischer Wert vorhergesagt wird, verwenden wir den mittleren quadratischen Fehler anstelle der Genauigkeit als Messwert:
model.compile(optimizer=tf.keras.optimizers.RMSprop(),
loss=tf.keras.losses.MeanSquaredError(),
metrics=['mae', 'mse'])
Mit der praktischen model.summary()-Funktion von Keras können Sie die Form und die Anzahl der trainierbaren Parameter Ihres Modells in jeder Ebene sehen.
Jetzt können wir unser Modell trainieren. Wir müssen nur die Methode fit() aufrufen und ihr unsere Trainingsdaten und Labels übergeben. Hier verwenden wir den optionalen Parameter „validation_split“, mit dem ein Teil unserer Trainingsdaten zurückgehalten wird, um das Modell in jedem Schritt zu validieren. Im Idealfall sollten sowohl der Trainings- als auch der Validierungsverlust sinken. In diesem Beispiel konzentrieren wir uns jedoch mehr auf die Modell- und Notebook-Tools als auf die Modellqualität:
model.fit(x_train, y_train, epochs=10, validation_split=0.1)
Schritt 3: Vorhersagen für Testbeispiele generieren
Um zu sehen, wie unser Modell funktioniert, generieren wir einige Testvorhersagen für die ersten zehn Beispiele aus unserem Test-Dataset.
num_examples = 10
predictions = model.predict(x_test[:num_examples])
Anschließend durchlaufen wir die Vorhersagen unseres Modells und vergleichen sie mit dem tatsächlichen Wert:
for i in range(num_examples):
print('Predicted val: ', predictions[i][0])
print('Actual val: ',y_test.iloc[i])
print()
Schritt 4: „git diff“ verwenden und Änderungen übernehmen
Nachdem Sie einige Änderungen am Notebook vorgenommen haben, können Sie die Funktion „git diff“ in der Git-Benutzeroberfläche für Notebooks ausprobieren. Das Notebook demo.ipynb sollte jetzt in der Benutzeroberfläche im Bereich „Geändert“ angezeigt werden. Bewegen Sie den Mauszeiger auf den Dateinamen und klicken Sie auf das Symbol für den Vergleich:

Sie sollten nun einen Vergleich Ihrer Änderungen sehen, der in etwa so aussieht:

Dieses Mal werden wir unsere Änderungen über die Befehlszeile mit dem Terminal übertragen. Wählen Sie in der oberen Menüleiste von JupyterLab im Menü Git die Option Git-Befehl im Terminal aus. Wenn Sie den Git-Tab in der linken Seitenleiste geöffnet haben, während Sie die folgenden Befehle ausführen, können Sie sehen, wie sich Ihre Änderungen in der Git-Benutzeroberfläche widerspiegeln.
Führen Sie in der neuen Terminalinstanz den folgenden Befehl aus, um die Notebookdatei für den Commit vorzubereiten:
git add demo.ipynb
Führen Sie dann den folgenden Befehl aus, um die Änderungen zu übernehmen (Sie können eine beliebige Commit-Nachricht verwenden):
git commit -m "Build and train TF model"
Anschließend sollte Ihr letzter Commit im Verlauf angezeigt werden:

6. What-If-Tool direkt über Ihr Notebook verwenden
Das What-If-Tool ist eine interaktive visuelle Schnittstelle, mit der Sie Ihre Datasets visualisieren und die Ausgabe Ihrer ML-Modelle besser nachvollziehen können. Es ist ein Open-Source-Tool, das vom PAIR-Team bei Google entwickelt wurde. Das Tool funktioniert mit jedem Modelltyp, bietet aber einige Funktionen, die ausschließlich für Cloud AI Platform entwickelt wurden.
Das What-If Tool ist in Cloud AI Platform Notebooks-Instanzen mit TensorFlow vorinstalliert. Hier verwenden wir sie, um die Gesamtleistung unseres Modells zu sehen und sein Verhalten bei Datenpunkten aus unserem Testsatz zu untersuchen.
Schritt 1: Daten für das What-If Tool vorbereiten
Damit wir das What-If Tool optimal nutzen können, senden wir ihm Beispiele aus unserem Test-Dataset zusammen mit den Ground Truth-Labels für diese Beispiele (y_test). So können wir vergleichen, was unser Modell vorhergesagt hat, mit dem Ground Truth. Führen Sie die folgende Codezeile aus, um einen neuen DataFrame mit unseren Testbeispielen und ihren Labels zu erstellen:
wit_data = pd.concat([x_test, y_test], axis=1)
In diesem Lab verbinden wir das What-If-Tool mit dem Modell, das wir gerade in unserem Notebook trainiert haben. Dazu müssen wir eine Funktion schreiben, mit der das Tool diese Testdatenpunkte für unser Modell ausführt:
def custom_predict(examples_to_infer):
preds = model.predict(examples_to_infer)
return preds
Schritt 2: What-If Tool instanziieren
Wir instanziieren das What-If Tool, indem wir ihm 500 Beispiele aus dem gerade erstellten verketteten Test-Dataset und den Ground Truth-Labels übergeben. Wir erstellen eine Instanz von WitConfigBuilder, um das Tool einzurichten. Dazu übergeben wir unsere Daten, die benutzerdefinierte Vorhersagefunktion, die wir oben definiert haben, sowie unser Ziel (das, was wir vorhersagen möchten) und den Modelltyp:
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)
Wenn das What-If Tool geladen wird, sollten Sie etwa Folgendes sehen:

Auf der x-Achse sehen Sie die Testdatenpunkte, die nach dem vorhergesagten Gewichtswert des Modells, weight_pounds, verteilt sind.
Schritt 3: Modellverhalten mit dem What-If-Tool untersuchen
Mit dem What-If Tool lassen sich viele interessante Dinge anstellen. Wir werden uns hier nur einige davon ansehen. Sehen wir uns zuerst den Editor für Datenpunkte an. Sie können einen beliebigen Datenpunkt auswählen, um seine Features zu sehen und die Featurewerte zu ändern. Klicken Sie dazu auf einen beliebigen Datenpunkt:

Auf der linken Seite sehen Sie die Feature-Werte für den ausgewählten Datenpunkt. Sie können auch das Ground-Truth-Label dieses Datenpunkts mit dem vom Modell vorhergesagten Wert vergleichen. In der linken Seitenleiste können Sie auch Feature-Werte ändern und die Modellvorhersage noch einmal ausführen, um zu sehen, wie sich diese Änderung auf Ihr Modell ausgewirkt hat. Wir können beispielsweise „gestation_weeks“ für diesen Datenpunkt in „30“ ändern, indem wir doppelt darauf klicken und die Vorhersage noch einmal ausführen:

Mithilfe der Drop-down-Menüs im Diagrammbereich des What-If Tool können Sie alle möglichen benutzerdefinierten Visualisierungen erstellen. Hier sehen Sie beispielsweise ein Diagramm mit dem vorhergesagten Gewicht der Modelle auf der x-Achse, dem Alter der Mutter auf der y-Achse und Punkten, die nach ihrem Inferenzfehler gefärbt sind (dunkler bedeutet einen größeren Unterschied zwischen dem vorhergesagten und dem tatsächlichen Gewicht). Hier sehen Sie, dass der Fehler des Modells leicht zunimmt, wenn das Gewicht abnimmt:

Klicken Sie als Nächstes links auf die Schaltfläche Diagramme für die partielle Abhängigkeit. Hier sehen Sie, wie sich die einzelnen Features auf die Vorhersage des Modells auswirken. Wenn beispielsweise die Schwangerschaftsdauer zunimmt, steigt auch das vom Modell vorhergesagte Gewicht des Babys:

Weitere Ideen für die Verwendung des What-If Tool finden Sie über die Links am Anfang dieses Abschnitts.
7. Optional: Lokales Git-Repository mit GitHub verbinden
Schließlich erfahren wir, wie wir das Git-Repository in unserer Notebookinstanz mit einem Repository in unserem GitHub-Konto verbinden. Wenn Sie diesen Schritt ausführen möchten, benötigen Sie ein GitHub-Konto.
Schritt 1: Neues Repository auf GitHub erstellen
Erstellen Sie in Ihrem GitHub-Konto ein neues Repository. Geben Sie einen Namen und eine Beschreibung ein, legen Sie fest, ob das Repository öffentlich sein soll, und wählen Sie Create repository aus. Sie müssen es nicht mit einer README-Datei initialisieren. Auf der nächsten Seite folgen Sie der Anleitung zum Pushen eines vorhandenen Repositorys über die Befehlszeile.
Öffnen Sie ein Terminalfenster und fügen Sie Ihr neues Repository als Remote-Repository hinzu. Ersetzen Sie username in der Repository-URL unten durch Ihren GitHub-Nutzernamen und your-repo durch den Namen des gerade erstellten Repositorys:
git remote add origin git@github.com:username/your-repo.git
Schritt 2: In der Notebooks-Instanz bei GitHub authentifizieren
Als Nächstes müssen Sie sich in Ihrer Notebook-Instanz bei GitHub authentifizieren. Dieser Vorgang hängt davon ab, ob Sie die 2‑Faktor-Authentifizierung in GitHub aktiviert haben.
Wenn Sie nicht wissen, wo Sie anfangen sollen, folgen Sie der Anleitung in der GitHub-Dokumentation, um einen SSH-Schlüssel zu erstellen und dann den neuen Schlüssel zu GitHub hinzuzufügen.
Schritt 3: Prüfen, ob Sie Ihr GitHub-Repository richtig verknüpft haben
Führen Sie git remote -v in Ihrem Terminal aus, um zu prüfen, ob Sie alles richtig eingerichtet haben. Ihr neues Repository sollte als Remote-Repository aufgeführt sein. Sobald Sie die URL Ihres GitHub-Repositorys sehen und sich über Ihr Notebook bei GitHub authentifiziert haben, können Sie direkt von Ihrer Notebook-Instanz aus in GitHub pushen.
Wenn Sie Ihr lokales Notebook-Git-Repository mit Ihrem neu erstellten GitHub-Repository synchronisieren möchten, klicken Sie oben in der Git-Seitenleiste auf die Schaltfläche zum Hochladen in die Cloud:

Aktualisieren Sie Ihr GitHub-Repository. Der Notebook-Code sollte jetzt mit Ihren vorherigen Commits angezeigt werden. Wenn andere Zugriff auf Ihr GitHub-Repository haben und Sie die neuesten Änderungen in Ihr Notebook übernehmen möchten, klicken Sie auf das Cloud-Downloadsymbol, um diese Änderungen zu synchronisieren.
Auf dem Tab „Verlauf“ der Git-Benutzeroberfläche für Notebooks können Sie sehen, ob Ihre lokalen Commits mit GitHub synchronisiert wurden. In diesem Beispiel entspricht origin/master unserem Repository auf GitHub:

Wenn Sie neue Commits vornehmen, klicken Sie einfach noch einmal auf die Schaltfläche zum Hochladen in die Cloud, um diese Änderungen in Ihr GitHub-Repository zu übertragen.
8. Glückwunsch!
Sie haben in diesem Lab viel geschafft. 👏👏👏
Zusammenfassend haben Sie Folgendes gelernt:
- AI Platform Notebook-Instanz erstellen und anpassen
- Initialisieren Sie ein lokales Git-Repository in dieser Instanz, fügen Sie Commits über die Git-UI oder die Befehlszeile hinzu und sehen Sie sich Git-Differenzen in der Git-UI des Notebooks an.
- Einfaches TensorFlow 2-Modell erstellen und trainieren
- What-If-Tool in Ihrer Notebook-Instanz verwenden
- Notebook-Git-Repository mit einem externen Repository auf GitHub verbinden
9. Bereinigen
Wenn Sie dieses Notebook weiterhin verwenden möchten, empfehlen wir, es auszuschalten, wenn Sie es nicht verwenden. Wählen Sie in der Notebooks-Benutzeroberfläche in der Cloud Console das Notebook und dann Beenden aus:

Wenn Sie alle Ressourcen löschen möchten, die Sie in diesem Lab erstellt haben, löschen Sie einfach die Notebook-Instanz, anstatt sie zu beenden.
Rufen Sie in der Cloud Console über das Navigationsmenü „Storage“ auf und löschen Sie die beiden Buckets, die Sie zum Speichern Ihrer Modell-Assets erstellt haben.