
Czym jest TensorFlow?
TensorFlow to biblioteka programów do obliczeń numerycznych, działająca na zasadzie open source od 2015 r., opracowana przez Google. Szczególną cechą TensorFlow jest wykorzystanie diagramów przepływu danych (data flow graphs).
TensorFlow został zaprojektowany przez naukowców i inżynierów Google, aby realizować projekty badawcze w dziedzinie maszynowego uczenia się (machine learning) oraz głębokich sieci neuronowych (deep neural networks). System pozostaje mimo to dość ogólny, co pozwala na szeroką gamę innych zastosowań. TensorFlow umożliwia przede wszystkim optymalne uczenie się modeli wymagających dużej ilości danych (na przykład banków zdjęć).
Elastyczna architektura TensorFlow umożliwia wdrożenie obliczeń na jednym lub większej liczbie procesorów (CPU) lub kart graficznych (GPU) na komputerze osobistym, serwerze itp. bez konieczności ponownego pisania kodu.
Firma Google stworzyła także Tensor Processing Units (inaczej TPU), wyspecjalizowany układ scalony, zaprojektowany z myślą o rozwoju maszynowego uczenia się i stosowania TensorFlow. TPU zostały zaprojektowane do wykorzystywania i testowania modeli, a nie do ich uczenia się. Od lutego 2018 r. TPU są dostępne w wersji beta Google Cloud Platform.
TensorFlow bazuje na platformie DistBelief (Google 2011) i interfejsie Pythona, posiadającego nietypową, niską formę (bardziej przystosowaną do architektury maszyn) w porównaniu do zwykłego użycia Pythona. Nie trzeba więc wpadać w panikę, sprawne posługiwanie się TensorFlow wymaga czasu!
TensorFlow jest obecnie używany przez liczne firmy i aplikacje – w tym, między innymi: Airbnb, Nvidia, Uber, Dropbox, Ebay, Google (oczywiście), Snapchat, Twitter… i mnóstwo innych!
Dzięki datalab TensorFlow może być używany na Google Cloud Platform (GCP), w konfiguracji domyślnej lub po dostosowaniu właściwości maszyny wirtualnej, takich jak: liczba serc, wybór CPU/GPU itp.
Jak wygląda TensorFlow?
Jak napisano powyżej, TensorFlow przedstawia obliczenia w formie grafu.
Wierzchołki grafu przedstawiają działania matematyczne, takie jak dodawanie, mnożenie, mnożenie macierzy, obliczanie pochodnych funkcji itp.
Krawędzie grafu to tensory łączące wierzchołki. Tensor może być sumą, wektorem, obrazem itp. Każdy wierzchołek grafu przybiera więc na początku różne tensory, przeprowadza obliczenia, i oddaje nowe tensory.
Przykład:
1+4=5
deriv(2x)=2
Kod przypisany do TensorFlow dzieli się na dwa główne etapy, budowę i realizację. W fazie budowy, zmienne i działania na grafie są określane i tworzone. Tworzenie grafu jest następnie automatycznie przetwarzane przez TensorFlow, co umożliwia optymalizację i zrównoleglanie kodu i realizacji.
Faza realizacji wykorzystuje sesję do przeprowadzania działań na grafie. Graf wykona obliczenie dopiero po utworzeniu sesji. Sesja umożliwia ustawienie działań grafu w odpowiednim elemencie (CPU/GPU/TPU) i udostępnia metody ich realizacji. Uruchomienie obliczeń przeprowadza się za pomocą metody run() sesji, czym zajmiemy się nieco dalej. Ten system realizacji obliczeń jest jedną z głównych właściwości TensorFlow – umożliwia on przeprowadzenie wszystkich działań grafu za jednym razem.
TensorFlow posiada wiele opcji umożliwiających głębokie uczenie się (Deep Learning) – optymalnie ułatwia on tworzenie sieci neuronowej, jej wykorzystanie i uczenie się.
Google Cloud Platform
Google Cloud Platform (lub GCP) to platforma online opracowana przez Google. Platforma ta udostępnia usługę tworzenia maszyn wirtualnych i sieci.
Do czego można ją wykorzystać?
* do wykonywania obliczeń
* do przechowywania danych
* do maszynowego uczenia się/głębokiego uczenia się
* i do wielu innych rzeczy!
W tej mini instrukcji pokażemy jak:
* otworzyć darmowe konto na GCP
* używać datalab na GCP na komputerze osobistym działającym w systemie GNU/Linux
* napisać pierwszy program na TensorFlow
Tworzenie konta na GCP
Jak wejść na GCP?
* otworzyć stronę https://cloud.google.com/
* kliknąć Try it free
* wypełnić formularz
W ten sposób otrzymasz bezpłatnie około 300 dolarów/250 euro do wykorzystania na platformie w ciągu roku. Zostaniesz poproszony o podanie informacji dotyczących karty płatniczej. Z konta NIE zostaną pobrane pieniądze. Jest to środek ostrożności mający na celu zabezpieczenie GCP przed niewłaściwym wykorzystywaniem.
Następnie należy:
* kliknąć Discover the console. Uruchomi się poradnik, który wspomoże naukę obsługi platformy.
* utworzyć/wybrać projekt
* wykonać instrukcje
* kliknąć Go to console.
Utwórz (lub wybierz) projekt na GCP, klikając:
https://console.cloud.google.com/cloud-resource-manager
Kliknij poniższy link, aby aktywować Google Compute Engine oraz Cloud Source Repositories APIs dla wybranego projektu:
https://console.cloud.google.com/flows/enableapi?apiid=compute,sourcerepo.googleapis.com
Instalacja gcloud na komputerze
Teraz przejdziemy do instalacji Google Cloud SDK na Twoim komputerze. W tym momencie Google Cloud SDK nie pracuje z Pythonem 3. Sprawdź, czy Twój komputer posiada Python 2 typ Python 2.7.9 lub nowszą wersją, z użyciem polecenia:
python2 –V
W razie potrzeby zaktualizuj Pythona
sudo apt-get install python2.7
Następnie pobierz jedną z poniższych paczek w zależności od architektury urządzenia, jakim dysponujesz:
Platforma | Link | Rozmiar |
Linux 64-bit (x86_64) | https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-187.0.0-linux-x86_64.tar.gz | 18,5 MB |
Linux 32-bit (x86) | https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-187.0.0-linux-x86.tar.gz | 18,1 MB |
Możesz wypakować plik w dowolnym miejscu systemu plików.
tar zxvf nom_du_fichier.tar.gz
Wprowadź poniższe dwa wiersze poleceń:
source ‚./google-cloud-sdk/path.bash.inc’
source ‚./google-cloud-sdk/completion.bash.inc’
Wprowadź następnie komendę gcloud init, aby zinicjalizować SDK.
./google-cloud-sdk/bin/gcloud init
Wykonaj instrukcje dotyczące konfiguracji: wybór/tworzenie projektu, wybór strefy itp.
Możesz uzyskać dostęp do gcloud z użyciem komendy:
gcloud –help
Dostęp do datalab
Najpierw zaktualizuj gcloud
gcloud components update
Następnie zainstaluj gcloud datalab component.
gcloud components install datalab
Stwórz instancję Cloud Datalab. Nazwa instancji musi rozpoczynać się od małej litery, po której następują maksymalnie 63 znaki: małe litery, cyfry lub łączniki.
Uwaga! Nazwa instancji nie może kończyć się łącznikiem.
datalab create nazwa_twojej_instancji
Wykonaj instrukcje. Wybierz sektor geograficzny w pobliżu miejsca, gdzie się znajdujesz. Wpisz zdanie, aby wygenerować klucz publiczny.
Uwaga! Jeśli proces trwa zbyt długo lub nie skończy się pomyślnie, prosimy ponowić tworzenie instancji. Podczas tego etapu często zdarzają się problemy z łączem.
Po powrocie na pulpit GCP i po kliknięciu 3 pasków u góry po lewej, a następnie Compute Engine, utworzona instancja będzie aktywna.
W końcu, po podłączeniu do datalab, otwórz w przeglądarce stronę główną Cloud Datalab, używając następującego adresu: http://localhost:8081
W ten sposób uzyskasz dostęp do Jupyter notebook. Utwórz nowy Jupyter notebook, klikając symbol ‘+’ po lewej od Notebooka.
Uwaga: aby ponownie uruchomić instancję po opuszczeniu jej
datalab connect nazwa_twojej_instancji
W dalszej części proponujemy wprowadzenie do TensorFlow na Google Cloud Platform.
Mój pierwszy program w TensorFlow na GCP
1) Witaj świecie!
Wprowadź poniższe wiersze poleceń do Jupyter notebook. Aby zatwierdzić komórkę, naciśnij Shift+Enter.
import tensorflow as tf # Importowanie biblioteki TensorFlow
witaj = tf.constant(‚Witaj!’) # Ustalenie stałej „Witaj” zawierającej ciąg znaków ‚Witaj!’
Jeśli wpiszesz witaj do notebooka, otrzymasz
<tf.Tensor ‚Const:0’ shape=() dtype=string>
To normalne, ponieważ brakuje podstawowej cegiełki TensorFlow, o której wspominaliśmy wcześniej w tym artykule – sesji w funkcji tf.Session() TensorFlow
sesja = tf.Session() # Tworzenie sesji
Może pojawić się wiadomość o błędzie – należy ją zignorować.
session.run(witaj) # Realizacja sesji
‚Witaj!’
Powyższy przykład wprowadza dwa najważniejsze elementy dla każdego programu w TensorFlow – funkcje Session() i run().
2) Podstawowe działania matematyczne
x = tf.constant(3) # Określenie stałej x=3
y = tf.constant(2) # Określenie stałej x=2
X = tf.constant([1,0], shape=(2,1)) # Określenie stałego wektora X
M = tf.constant([1,1,2,2], shape=(2,2)) # Określenie stałej matrycy M
resultat_1 = tf.add(x, y) # Dodawanie
resultat_2 = tf.multiply(x, y) # Mnożenie
resultat_3 = tf.matmul(M, X) # Mnożenie macierzy
session = tf.Session() # Tworzenie sesji
session.run(resultat_1) # Realizacja sesji
session.run(resultat_2) # Realizacja sesji
session.run(resultat_3) # Realizacja sesji
Podobnie jak wcześniej – nie należy zapomnieć o realizacji sesji!
3) Zmienne i inicjalizacja
W TensorFlow zmienne są określane i zarządzane za pomocą tf.Variable().
x=tf.Variable(0)
Zmienna to tensor, którego wartość może się zmienić wskutek wykonania obliczenia.
x = tf.constant(0)
y = tf.Variable(x + 1)
Uwaga: zmienne muszą zostać zainicjowane, aby graf mógł ich użyć. W tym celu używa się funkcji tf.global_variables_initializer().
Przykład programu:
import tensorflow as tf
x = tf.constant(0)
y = tf.Variable(x + 1)
initialisation = tf.global_variables_initializer() # Inicjalizacja zmiennych
with tf.Session() as session:
session.run(initialisation)
print(session.run(y))
Przykład użycia: Zmienna może zostać wykorzystana do wag w sieci neuronowej, w tym wypadku podlega aktualizacji podczas trenowania modelu.
4) Symbole zastępcze (Placeholders)
Symbol zastępczy (Placeholder) to tensor stworzony dzięki metodzie tf.placeholder(). Tworząc go, nie nadaje mu się żadnej konkretnej wartości, precyzuje się jedynie typ i wymiar danych
x = tf.placeholder(tf.float32, shape=(1024, 1024)) # tworzenie symbolu zastępczego x typu float32 o wymiarach (1024, 1024)
Symbol zastępczy (Placeholder) może zostać uznany za zmienną, która uzyska wartości w programie później, na etapie realizacji. Wartość jest ustalana dzięki przeprowadzeniu (run) obliczenia.
x = tf.placeholder(tf.float32, shape=(1024, 1024)) # tworzenie symbolu zastępczego x
y = tf.matmul(x, x) #
z tf.Session() as sess:
rand_array = np.random.rand(1024, 1024) # określanie rand_array
print(sess.run(y, feed_dict={x: rand_array})) # nadaje się x wartość rand_array podczas realizacji
Przykład użycia: przy każdej iteracji uczenia sieci neuronowej używa się symbolu zastępczego (Placeholder) do zasilenia modelu nową paczką obrazów.
Wnioski
Dysponujesz obecnie kwotą w wysokości 250 euro na GCP i wiesz, jak dostać się do datalab ze swojego komputera. Masz za sobą pierwsze linie kodu w TensorFlow i posiadasz podstawy, umożliwiające zrozumienie zaawansowanych kodów napisanych w tym języku.
Jeśli chcesz pójść o krok dalej, to w datalab na GCP znajdziesz bardziej zaawansowane przykłady użycia TensorFlow oraz inne samouczki dotyczące maszynowego uczenia się.
Miłego odkrywania!
Bibliografia i źródła
https://github.com/tensorflow/tensorflow
https://cloud.google.com/datalab/docs/quickstart
https://cloud.google.com/solutions/running-distributed-tensorflow-on-compute-engine
https://www.nvidia.fr/daa-center/gpu-accelerated-applications/tensorflow/
https://blog.xebia.fr/2017/03/01/tensorflow-deep-learning-episode-1-introduction/
https://learningtensorflow.com/lesson2/