1. Omówienie
W tym module poznasz różne narzędzia w notebookach AI Platform, które służą do eksplorowania danych i tworzenia prototypów modeli ML.
Czego się nauczysz
Poznasz takie zagadnienia jak:
- Tworzenie i dostosowywanie instancji notatników AI Platform
- Śledź kod swoich notatników za pomocą Gita zintegrowanego bezpośrednio z notatnikami AI Platform
- Korzystanie z narzędzia What-If w notatniku
Łączny koszt przeprowadzenia tego laboratorium w Google Cloud wynosi około 1 USD. Szczegółowe informacje o cenach notatników AI Platform znajdziesz tutaj.
2. Tworzenie instancji notatników AI Platform
Aby uruchomić to ćwiczenie, musisz mieć projekt Google Cloud Platform z włączonym rozliczeniem. Aby utworzyć projekt, wykonaj te instrukcje.
Krok 2. Włącz interfejs Compute Engine API
Przejdź do Compute Engine i wybierz Włącz, jeśli usługa nie jest jeszcze włączona. Potrzebujesz go do utworzenia instancji notatnika.
Krok 3. Utwórz instancję notatnika
W konsoli Cloud Console otwórz sekcję AI Platform Notebooks i kliknij Nowa instancja. Następnie wybierz najnowszy typ instancji TensorFlow 2 Enterprise bez procesorów graficznych:
Nazwij instancję lub użyj nazwy domyślnej. Następnie przyjrzymy się opcjom dostosowywania. Kliknij przycisk Dostosuj:
Notebooki AI Platform mają wiele opcji dostosowywania, takich jak region, w którym jest wdrażana instancja, typ obrazu, rozmiar maszyny, liczba GPU itp. Użyjemy domyślnych ustawień regionu i środowiska. W konfiguracji maszyny użyjemy maszyny n1-standard-8:
Nie dodamy żadnych kart graficznych. Użyjemy domyślnych ustawień dysku rozruchowego, sieci i uprawnień. Aby utworzyć instancję, kliknij Utwórz. Ich wykonanie może potrwać kilka minut.
Po utworzeniu instancji w interfejsie Notebooks obok niej pojawi się zielony znacznik wyboru. Kliknij Otwórz JupyterLab, aby otworzyć instancję i rozpocząć tworzenie prototypu:
Po otwarciu instancji utwórz nowy katalog o nazwie codelab. To katalog, z którego będziemy korzystać w tym laboratorium:
Kliknij dwukrotnie nowo utworzony katalog codelab, a następnie w menu wybierz notatnik Python 3:
Zmień nazwę notatnika na demo.ipynb
lub dowolną inną nazwę.
Krok 4. Zaimportuj pakiety Pythona
Utwórz nową komórkę w notatniku i zaimportuj biblioteki, których użyjemy w tym CodeLab:
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. Łączenie danych BigQuery z notatnikiem
BigQuery, hurtownia danych Google Cloud, udostępniła publicznie wiele zbiorów danych, które możesz eksplorować. Notebooki AI Platform obsługują bezpośrednią integrację z BigQuery bez konieczności uwierzytelniania.
W tym module użyjemy zbioru danych o urodzeniach. Zawiera on dane dotyczące prawie wszystkich urodzeń w Stanach Zjednoczonych w ciągu 40 lat, w tym wagę urodzeniową dziecka i informacje demograficzne o jego rodzicach. Do przewidywania masy urodzeniowej dziecka użyjemy podzbioru funkcji.
Krok 1. Pobierz dane BigQuery do naszego notebooka
Do pobrania danych do obiektu DataFrame w Pandas użyjemy biblioteki klienta BigQuery w Pythonie. Pierwotny zbiór danych ma 21 GB i zawiera 123 mln wierszy. Dla uproszczenia użyjemy tylko 10 tys. wierszy z danych.
Utwórz zapytanie i wyświetl podgląd otrzymanego DataFrame za pomocą tego kodu. Tutaj otrzymujemy 4 cechy z pierwotnego zbioru danych wraz z wagą dziecka (czyli z wartością, którą będzie przewidywać nasz model). Zbiór danych obejmuje wiele lat, ale w przypadku tego modelu użyjemy tylko danych z lat 2000 i późniejszych:
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()
Aby uzyskać podsumowanie parametrów liczbowych w naszym zbiorze danych, uruchom:
df.describe()
W przypadku kolumn liczbowych widać średnią, odchylenie standardowe, minimalną wartość i inne dane. Na koniec sprawdźmy dane z kolumny logicznej określającej płeć dziecka. Możemy to zrobić za pomocą metody Pandas value_counts
:
df['is_male'].value_counts()
Wygląda na to, że zbiór danych jest prawie zrównoważony pod względem płci (50/50).
Krok 2. Przygotuj zbiór danych do trenowania
Po pobraniu zbioru danych do notebooka jako DataFrame w bibliotece Pandas możemy przeprowadzić wstępne przetwarzanie i podzielić zbiór na zbiór treningowy i testowy.
Najpierw usuń z danych wiersze z wartościami pustymi i je pomieszaj:
df = df.dropna()
df = shuffle(df, random_state=2)
Następnie wyodrębnij kolumnę etykiety do osobnej zmiennej i utwórz DataFrame tylko z naszych atrybutami. Ponieważ is_male
jest wartością logiczną, przekształcimy ją na liczbę całkowitą, aby wszystkie dane wejściowe do modelu były liczbowe:
labels = df['weight_pounds']
data = df.drop(columns=['weight_pounds'])
data['is_male'] = data['is_male'].astype(int)
Jeśli teraz wyświetlisz podgląd naszego zbioru danych, wykonując polecenie data.head()
, zobaczysz 4 cechy, których użyjemy do trenowania.
4. Inicjowanie git
Notatniki AI Platform są bezpośrednio zintegrowane z Gita, dzięki czemu możesz zarządzać wersjami bezpośrednio w środowisku notebooka. Umożliwia to akceptowanie kodu bezpośrednio w interfejsie notatnika lub za pomocą terminala dostępnego w JupyterLab. W tej sekcji zainicjujemy repozytorium Git w notatniku i zrealizujemy pierwsze potwierdzenie za pomocą interfejsu użytkownika.
Krok 1. Inicjuj repozytorium Git
W katalogu codelab wybierz Git, a następnie Init na górnym pasku menu w JupyterLab:
Gdy pojawi się pytanie, czy chcesz, aby ten katalog był repozytorium Git, wybierz Tak. Następnie na pasku bocznym kliknij ikonę Git, aby sprawdzić stan plików i zapisanych zmian:
Krok 2. Wykonaj pierwsze potwierdzenie
W tym interfejsie możesz dodawać pliki do zatwierdzenia, wyświetlać różnice między plikami (omówimy to później) i zatwierdzać zmiany. Zacznijmy od zacommitowania właśnie dodanego pliku z notatnikiem.
Zaznacz pole obok pliku ze skoropisem demo.ipynb
, aby zainicjować go do zatwierdzenia (możesz zignorować katalog .ipynb_checkpoints/
). Wpisz wiadomość o zapisu w polu tekstowym, a potem kliknij znacznik wyboru, aby zapisać zmiany:
Gdy pojawi się taka prośba, wpisz swoje imię i nazwisko oraz adres e-mail. Następnie wróć do karty Historia, aby zobaczyć pierwsze potwierdzenie:
Pamiętaj, że zrzuty ekranu mogą się różnić od Twojego interfejsu z powodu aktualizacji wprowadzonych od czasu opublikowania tego laboratorium.
5. Tworzenie i trenowanie modelu TensorFlow
Aby utworzyć model przewidujący wagę dziecka, użyjemy zbioru danych BigQuery o porodach pobranego do naszego notebooka. W tym module skupimy się na narzędziach notebooka, a nie na dokładności samego modelu.
Krok 1. Podziel dane na zbiory do trenowania i testowania
Przed utworzeniem modelu użyjemy narzędzia Scikit Learn train_test_split
do podziału danych:
x,y = data,labels
x_train,x_test,y_train,y_test = train_test_split(x,y)
Teraz możesz utworzyć model TensorFlow.
Krok 2. Utwórz i trenowanie modelu TensorFlow
Ten model będziemy tworzyć za pomocą interfejsu API modelu tf.keras Sequential
, który umożliwia zdefiniowanie modelu jako zestawu warstw. Tutaj znajdziesz cały kod potrzebny do zbudowania modelu:
model = Sequential([
Dense(64, activation='relu', input_shape=(len(x_train.iloc[0]),)),
Dense(32, activation='relu'),
Dense(1)]
)
Następnie skompilujemy model, aby go wytrenować. Tutaj wybierzemy optymalizator modelu, funkcję utraty i dane, które mają być rejestrowane przez model podczas trenowania. Ponieważ jest to model regresji (prognozujący wartość liczbową), jako miarę używamy średniego kwadratowego błędu zamiast dokładności:
model.compile(optimizer=tf.keras.optimizers.RMSprop(),
loss=tf.keras.losses.MeanSquaredError(),
metrics=['mae', 'mse'])
Aby sprawdzić kształt i liczbę parametrów trenowanych w modelu na poszczególnych warstwach, możesz użyć praktycznej funkcji model.summary()
w Keras.
Możemy już wytrenować model. Wystarczy wywołać metodę fit()
, przekazując jej dane i etykiety do trenowania. Użyjemy tutaj opcjonalnego parametru validation_split, który będzie przechowywać część danych treningowych, aby weryfikować model na każdym kroku. W idealnej sytuacji obie wartości powinny maleć. Pamiętaj jednak, że w tym przykładzie bardziej skupiamy się na narzędziach do tworzenia modeli i notatek niż na jakości modelu:
model.fit(x_train, y_train, epochs=10, validation_split=0.1)
Krok 3. Wygeneruj prognozy na podstawie przykładów testowych
Aby sprawdzić, jak działa nasz model, wygenerujmy prognozy testowe na podstawie pierwszych 10 przypadków z naszego testowego zbioru danych.
num_examples = 10
predictions = model.predict(x_test[:num_examples])
Następnie przeanalizujemy prognozy modelu, porównując je z rzeczywistymi wartościami:
for i in range(num_examples):
print('Predicted val: ', predictions[i][0])
print('Actual val: ',y_test.iloc[i])
print()
Krok 4. Użyj polecenia git diff i zastosuj zmiany
Teraz, gdy wprowadziłeś/wprowadziłaś już zmiany w notatniku, możesz wypróbować funkcję git diff dostępną w interfejsie Git w notatniku. Notatnik demo.ipynb
powinien teraz znajdować się w sekcji „Zmienione” w interfejsie. Najedź kursorem na nazwę pliku i kliknij ikonę różnic:
Powinieneś zobaczyć różnice między wersjami, np. taką:
Tym razem zrealizujemy zmiany za pomocą wiersza poleceń w terminalu. W menu Git na górnym pasku menu JupyterLab wybierz Polecenie Git w terminalu. Jeśli podczas wykonywania tych poleceń masz otwartą kartę git na pasku bocznym po lewej stronie, zmiany będą widoczne w interfejsie git.
Aby zebrać plik notebooka do zatwierdzenia, w nowej instancji terminala uruchom to polecenie:
git add demo.ipynb
Następnie uruchom te polecenia, aby zatwierdzić zmiany (możesz użyć dowolnego komunikatu zatwierdzenia):
git commit -m "Build and train TF model"
Następnie w historii powinien pojawić się najnowszy commit:
6. Korzystanie z narzędzia What-If bezpośrednio z zeszytu
Narzędzie What-If to interaktywny wizualny interfejs, który pomaga wizualizować zbiory danych i lepiej interpretować wyniki modeli systemów uczących się. Jest to narzędzie open source stworzone przez zespół PAIR w Google. Ta usługa działa z dowolnym typem modelu, ale ma też kilka funkcji stworzonych specjalnie dla Cloud AI Platform.
Narzędzie What-If jest wstępnie zainstalowane w instancjach notatek Cloud AI Platform z TensorFlow. Użyjemy go, aby sprawdzić ogólną skuteczność modelu i sprawdzić jego zachowanie na punktach danych z naszego zbioru testowego.
Krok 1. Przygotuj dane do użycia w narzędziu „Co jeśli?”
Aby w pełni wykorzystać możliwości narzędzia What-If, wyślemy mu przykłady z naszego zbioru testowego wraz z etykietami danych podstawowych (y_test
) dla tych przykładów. Dzięki temu będziemy mogli porównać prognozy modelu z danymi rzeczywistymi. Uruchom podany niżej wiersz kodu, aby utworzyć nowy obiekt DataFrame z przykładami testowymi i ich etykietami:
wit_data = pd.concat([x_test, y_test], axis=1)
W tym module połączymy narzędzie What-If z modelem, który właśnie trenowaliśmy w notebooku. Aby to zrobić, musimy napisać funkcję, której narzędzie użyje do uruchomienia tych testowych punktów danych w naszym modelu:
def custom_predict(examples_to_infer):
preds = model.predict(examples_to_infer)
return preds
Krok 2. Utwórz instancję narzędzia „Co jeśli?”
Utworzymy instancję narzędzia What-If, przekazując mu 500 przykładów z złączonego zbioru danych testowych oraz etykiet danych podstawowych, które właśnie utworzyliśmy. Tworzymy instancję WitConfigBuilder
, aby skonfigurować narzędzie, przekazując mu nasze dane, zdefiniowaną powyżej niestandardową funkcję prognozowania, cel (czyli to, co prognozujemy) oraz typ modelu:
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)
Gdy narzędzie What-If się wczyta, powinieneś zobaczyć coś takiego:
Na osi X widać punkty danych testowych rozłożone według przewidywanej wartości wagi modelu, weight_pounds
.
Krok 3. Poznaj działanie modelu za pomocą narzędzia „Co jeśli?”
Za pomocą narzędzia What-If możesz wykonywać wiele ciekawych działań. Tutaj omówimy tylko kilka z nich. Najpierw przyjrzyjmy się edytorowi punktu danych. Możesz wybrać dowolny punkt danych, aby wyświetlić jego cechy i zmienić ich wartości. Najpierw kliknij dowolny punkt danych:
Po lewej stronie zobaczysz wartości cech wybranego punktu danych. Możesz też porównać etykietę danych podstawowych (ground truth) z wartością przewidzianą przez model. W panelu bocznym po lewej stronie możesz też zmienić wartości cech i ponownie uruchomić prognozowanie modelu, aby sprawdzić, jaki wpływ na model ma ta zmiana. Możemy na przykład zmienić wartość parametru gestation_weeks na 30, klikając go dwukrotnie i ponownie uruchamiając prognozę:
Za pomocą menu w sekcji wykresu w narzędziu „Co jeśli?” możesz tworzyć różnego rodzaju wizualizacje. Oto na przykład wykres z przewidywanym ciężarem modeli na osi X, wiekiem matki na osi Y i punktami pokolorowanymi według błędu wnioskowania (ciemniejsze oznacza większą różnicę między przewidywanym a rzeczywistym ciężarem). Wygląda na to, że wraz ze spadkiem wagi błąd modelu rośnie nieznacznie:
Następnie po lewej stronie kliknij przycisk Wykresy częściowej zależności. Pokazuje, jak poszczególne cechy wpływają na prognozę modelu. Na przykład wraz z długością ciąży rośnie przewidywana masa ciała dziecka według naszego modelu:
Aby dowiedzieć się więcej o korzystaniu z narzędzia „Co jeśli?”, kliknij linki na początku tej sekcji.
7. Opcjonalnie: połącz lokalne repozytorium Git z GitHubem
Na koniec dowiesz się, jak połączyć repozytorium Git w naszym wystąpieniu notebooka z repozytorium na naszym koncie GitHub. Jeśli chcesz wykonać ten krok, musisz mieć konto GitHub.
Krok 1. Utwórz nowe repozytorium w GitHub
Utwórz nowe repozytorium na swoim koncie GitHub. Nadaj mu nazwę i opis, zdecyduj, czy ma być publiczny, i wybierz Utwórz repozytorium (nie musisz inicjować go za pomocą pliku README). Na następnej stronie postępuj zgodnie z instrukcjami przesyłania istniejącego repozytorium z poziomu wiersza poleceń.
Otwórz okno terminala i dodaj nowe repozytorium jako repozytorium zdalne. Zastąp username
w adresie URL repozytorium poniżej swoją nazwą użytkownika GitHuba, a your-repo
– nazwą właśnie utworzonego repozytorium:
git remote add origin git@github.com:username/your-repo.git
Krok 2. Uwierzytelnienie w GitHub w instancji notatnika
Następnie musisz uwierzytelnić się w GitHub z poziomu instancji notebooka. Ten proces różni się w zależności od tego, czy masz włączone uwierzytelnianie dwuskładnikowe w GitHub.
Jeśli nie wiesz, od czego zacząć, wykonaj czynności opisane w dokumentacji GitHub, aby utworzyć klucz SSH, a następnie dodaj nowy klucz do GitHub.
Krok 3. Sprawdź, czy repozytorium GitHub zostało prawidłowo połączone
Aby mieć pewność, że wszystko jest skonfigurowane prawidłowo, uruchom git remote -v
w terminalu. Nowe repozytorium powinno być widoczne jako repozytorium zdalne. Gdy zobaczysz adres URL repozytorium GitHub i uwierzytelnisz się w GitHub z poziomu notatnika, możesz przesłać dane bezpośrednio do GitHub z instancji notatnika.
Aby zsynchronizować lokalne repozytorium Git z nowo utworzonym repozytorium GitHub, kliknij przycisk przesyłania do chmury u góry paska bocznego Git:
Odśwież repozytorium GitHub, a zobaczysz kod notebooka z poprzednimi zatwierdzeniami. Jeśli inne osoby mają dostęp do Twojego repozytorium GitHub i chcesz pobrać najnowsze zmiany do swojego notebooka, kliknij ikonę chmury, aby zsynchronizować te zmiany.
Na karcie Historia w interfejsie Git Notebooków możesz sprawdzić, czy Twoje lokalne zatwierdzenia są zsynchronizowane z GitHubem. W tym przykładzie origin/master
odpowiada naszemu repozytorium na GitHub:
Za każdym razem, gdy wprowadzasz nowe zatwierdzenia, po prostu kliknij przycisk przesyłania w chmurze, aby przesłać zmiany do repozytorium GitHub.
8. Gratulacje!
W tym module wykonałeś/-aś wiele zadań 👏👏👏
Podsumowując, dowiesz się, jak:
- Tworzenie i dostosowywanie instancji notatnika AI Platform
- zainicjować lokalne repozytorium Git w tej instancji, dodać commity za pomocą interfejsu lub wiersza polecenia Git, wyświetlić różnice w Git w interfejsie Notebooka;
- Tworzenie i trenowanie prostego modelu TensorFlow 2
- Korzystanie z narzędzia What-If w ramach instancji Notebooka
- Łączenie repozytorium git Notebooka z zewnętrznym repozytorium w GitHubie
9. Czyszczenie
Jeśli chcesz nadal korzystać z notatnika, zalecamy wyłączenie go, gdy go nie używasz. W interfejsie Notebooków w konsoli Cloud wybierz notebook, a następnie Zatrzymaj:
Jeśli chcesz usunąć wszystkie zasoby utworzone w tym laboratorium, zamiast je zatrzymywać, po prostu usuń instancję notatnika.
W menu nawigacyjnym konsoli Google Cloud przejdź do usługi Storage i usuń oba zasobniki utworzone do przechowywania zasobów modelu.