Zaprojektowałem ten samouczek TensorFlow dla profesjonalistów i entuzjastów, którzy są zainteresowani zastosowaniem algorytmu uczenia głębokiego przy użyciu TensorFlow do rozwiązywania różnych problemów. TensorFlow to biblioteka do głębokiego uczenia o otwartym kodzie źródłowym oparta na koncepcji wykresów przepływu danych służących do budowania modeli. Umożliwia tworzenie wielowarstwowych sieci neuronowych o dużej skali.Nauka korzystania z tej biblioteki jest również podstawową częścią .Poniżej przedstawiono tematy, które zostaną omówione w tym blogu samouczka TensorFlow:
- Co to jest TensorFlow
- Podstawy kodu TensorFlow
- TensorFlow UseCase
Co to są tensory?
W tym samouczku TensorFlow, zanim porozmawiamy o TensorFlow, najpierw zrozumiemy czym są tensory . Tensory to nic innego jak de facto do reprezentowania danych w głębokim uczeniu się.
Jak pokazano na powyższym obrazku, tensory są po prostu wielowymiarowymi tablicami, które pozwalają na reprezentowanie danych o wyższych wymiarach. Ogólnie rzecz biorąc, uczenie głębokie ma do czynienia z wysokowymiarowymi zbiorami danych, w których wymiary odnoszą się do różnych funkcji obecnych w zestawie danych. W rzeczywistości nazwa „TensorFlow” wywodzi się z operacji, które sieci neuronowe wykonują na tensorach. To dosłownie przepływ tensorów. Ponieważ wiesz już, czym są tensory, przejdźmy dalej w tym samouczku TensorFlow i zrozummy - co to jest TensorFlow?
Co to jest TensorFlow?
TensorFlow to biblioteka oparta na języku Python, która zapewnia różne typy funkcjonalności do wdrażania modeli uczenia głębokiego. Jak wspomniano wcześniej, termin TensorFlow składa się z dwóch terminów - Tensor & Flow:
W TensorFlow termin tensor odnosi się do reprezentacji danych jako tablicy wielowymiarowej, podczas gdy termin przepływ odnosi się do serii operacji wykonywanych na tensorach, jak pokazano na powyższym obrazku.
Teraz omówiliśmy wystarczająco dużo informacji na temat TensorFlow.
Następnie w tym samouczku TensorFlow będziemy omawiać podstawy kodu TensorFlow.
Samouczek TensorFlow: Podstawy kodu
Zasadniczo cały proces pisania programu TensorFlow obejmuje dwa kroki:
- Tworzenie wykresu obliczeniowego
- Uruchamianie wykresu obliczeniowego
Pozwól, że wyjaśnię ci powyższe dwa kroki jeden po drugim:
1. Budowanie wykresu obliczeniowego
Więc, co to jest wykres obliczeniowy? Cóż, wykres obliczeniowy to seria operacji TensorFlow ułożonych w węzły na wykresie. Każdy węzeł przyjmuje 0 lub więcej tensorów jako dane wejściowe i generuje tensor jako dane wyjściowe. Podam przykład prostego wykresu obliczeniowego, który składa się z trzech węzłów - do , b & do jak pokazano niżej:
Wyjaśnienie powyższego wykresu obliczeniowego:
Stałe węzłysą używane do przechowywania wartości stałych, ponieważ przyjmują zerowe dane wejściowe, ale produkują zapisane wartości jako dane wyjściowe. W powyższym przykładzie a i b są stałymi węzłami o wartościach odpowiednio 5 i 6.
- Węzeł c reprezentuje operację mnożenia stałego węzła a przez b. Dlatego wykonanie węzła c spowoduje pomnożenie węzła const a i b.
Zasadniczo można myśleć o grafie obliczeniowym jako o alternatywnym sposobie konceptualizacji obliczeń matematycznych, które mają miejsce w programie TensorFlow. Operacje przypisane do różnych węzłów grafu obliczeniowego mogą być wykonywane równolegle, zapewniając w ten sposób lepszą wydajność pod względem obliczeń.
Tutaj po prostu opisujemy obliczenia, nic nie oblicza, nie przechowuje żadnych wartości, po prostu definiuje operacje określone w kodzie.
2. Uruchomienie wykresu obliczeniowego
Weźmy poprzedni przykład wykresu obliczeniowego i zrozummy, jak go wykonać. Poniżej znajduje się kod z poprzedniego przykładu:
Przykład 1:
import tensorflow as tf # Zbuduj wykres a = tf.constant (5.0) b = tf.constant (6.0) c = a * b
Teraz, aby uzyskać dane wyjściowe węzła c, musimy uruchomić wykres obliczeniowy w ramach a sesja . Sesja umieszcza operacje na wykresach na urządzeniach, takich jak procesory lub procesory graficzne, i zapewnia metody ich wykonywania.
Sesja hermetyzuje kontrolę i stan środowiska uruchomieniowego TensorFlow, tj. Przechowuje informacje o kolejności wykonywania wszystkich operacji i przekazuje wynik już obliczonej operacji do następnej operacji w potoku. Pokażę Ci, jak uruchomić powyższy wykres obliczeniowy w ramach sesji (wyjaśnienie każdego wiersza kodu zostało dodane jako komentarz):
# Utwórz obiekt sesji sess = tf.Session () # Uruchom wykres w ramach sesji i zapisz dane wyjściowe w zmiennej output_c = sess.run (c) # Wydrukuj dane wyjściowe węzła c print (output_c) # Zamknij sesję, aby zwolnij część zasobów sess.close ()
Wynik: 30
Tak więc chodziło o sesję i wykonanie w niej wykresu obliczeniowego. Porozmawiajmy teraz o zmiennych i elementach zastępczych, których będziemy intensywnie używać podczas budowania modelu uczenia głębokiego przy użyciu TensorFlow.
różnica między zmiennymi a niezmiennymi
Stałe, symbol zastępczy i zmienne
W TensorFlow stałe, symbole zastępcze i zmienne są używane do reprezentowania różnych parametrów modelu uczenia głębokiego. Ponieważ wspomniałem już wcześniej o stałych, zacznę od symboli zastępczych.
Symbol zastępczy:
Stała TensorFlow umożliwia przechowywanie wartości, ale co zrobić, jeśli chcesz, aby węzły pobierały dane wejściowe podczas wykonywania? W przypadku tego rodzaju funkcji używane są symbole zastępcze, które umożliwiają wykresowi przyjmowanie zewnętrznych danych wejściowych jako parametrów. Zasadniczo symbol zastępczy to obietnica dostarczenia wartości później lub w trakcie działania. Pozwólcie, że podam wam przykład, aby wszystko było prostsze:
import tensorflow as tf # Tworzenie symboli zastępczych a = tf. symbol zastępczy (tf.float32) b = tf. placeholder (tf.float32) # Przypisywanie operacji mnożenia w.r.t. a & ampamp b do węzła mul mul = a * b # Utwórz obiekt sesji sess = tf.Session () # Wykonywanie mul przez przekazanie wartości [1, 3] [2, 4] odpowiednio dla a i b output = sess.run ( mul, {a: [1,3], b: [2, 4]}) print ('Mnożenie ab:', wyjście)
Wynik: [2. 12.]
Punkty, o których należy pamiętać symbole zastępcze:
- Symbole zastępcze nie są inicjowane i nie zawierają żadnych danych.
- Należy zapewnić dane wejściowe lub źródła do symbolu zastępczego, które są uwzględniane w czasie wykonywania.
- Wykonanie symbolu zastępczego bez danych wejściowych generuje błąd.
Przejdźmy teraz do przodu i zrozummy - co to są zmienne?
Zmienne
W uczeniu głębokim symbole zastępcze są używane do przyjmowania dowolnych danych wejściowych w modelu lub wykresie. Oprócz pobierania danych wejściowych, musisz również zmodyfikować wykres tak, aby mógł generować nowe wyniki w.r.t. te same wejścia. W tym celu będziesz używać zmiennych. Krótko mówiąc, zmienna pozwala na dodanie do wykresu takich parametrów lub węzłów, które są dające się trenować, tj. Wartość może być modyfikowana w czasie. Zmienne definiuje się, podając ich wartość początkową i typ, jak pokazano poniżej:
var = tf.Variable ([0,4], dtype = tf.float32)
Uwaga:
- W przypadku, gdy nie podasz jawnie typu danych, TensorFlow wywnioskuje typ stałej / zmiennej na podstawie zainicjowanej wartości.
- TensorFlow ma wiele własnych typów danych, takich jak tf.float32 , tf.int32 itp. Możesz odnieść się do nich wszystkich powyżej tutaj .
Stałe są inicjalizowane podczas wywołania tf.constant , a ich wartość nigdy się nie zmieni. Wręcz przeciwnie, zmienne nie są inicjalizowane podczas wywołania tf.Variable . Aby zainicjować wszystkie zmienne w programie TensorFlow, musisz musi jawnie wywołaj specjalną operację, jak pokazano poniżej:
init = tf.global_variables_initializer () sess.run (init)
Zawsze pamiętaj, że zmienna musi zostać zainicjowana przed pierwszym użyciem wykresu.
Uwaga: Zmienne TensorFlow to bufory w pamięci, które zawierają tensory, ale w przeciwieństwie do zwykłych tensorów, które są tworzone tylko wtedy, gdy wykres jest uruchamiany i są później natychmiast usuwane, zmienne przetrwają wiele wykonań wykresu.
goto function c ++
Teraz, gdy omówiliśmy już wystarczająco dużo podstaw TensorFlow, przejdźmy dalej i zrozummy, jak zaimplementować model regresji liniowej przy użyciu TensorFlow.
Model regresji liniowej wykorzystujący TensorFlow
Model regresji liniowej służy do przewidywania nieznanej wartości zmiennej (zmiennej zależnej) na podstawie znanej wartości innych zmiennych (zmiennej niezależnej) za pomocą równania regresji liniowej, jak pokazano poniżej:
Dlatego do stworzenia modelu liniowego potrzebujesz:
- Zmienna zależna lub wyjściowa (Y)
- Zmienna nachylenia (w)
- Y - Przechwycenie lub odchylenie (b)
- Zmienna niezależna lub wejściowa (X)
Zacznijmy więc budować model liniowy za pomocą TensorFlow:
Skopiuj kod, klikając przycisk podany poniżej:
# Tworzenie zmiennej dla nachylenia parametru (W) o wartości początkowej 0,4 W = tf.Variable ([. 4], tf.float32) # Tworzenie zmiennej dla odchylenia parametru (b) o wartości początkowej -0,4 b = tf.Variable ( [-0.4], tf.float32) # Tworzenie symboli zastępczych do dostarczania danych wejściowych lub zmiennej niezależnej, oznaczonych przez xx = tf.placeholder (tf.float32) # Równanie regresji liniowej linear_model = W * x + b # Inicjalizacja wszystkich zmiennych sess = tf.Session () init = tf.global_variables_initializer () sess.run (init) # Uruchomiony model regresji w celu obliczenia wartości wyjściowej wrt do podanych wartości x print (sess.run (linear_model {x: [1, 2, 3, 4]}))
Wynik:
[0, 0,40000001 0,80000007 1.20000005]
Powyższy kod przedstawia tylko podstawową ideę implementacji modelu regresji, tj. Jak postępować zgodnie z równaniem linii regresji, aby uzyskać wynik w.r.t. zestaw wartości wejściowych. Ale są jeszcze dwie rzeczy do dodania w tym modelu, aby uczynić go kompletnym modelem regresji:
- Po pierwsze, musimy zapewnić mechanizm, dzięki któremu nasz model będzie mógł sam się szkolić w oparciu o dany zestaw danych wejściowych i odpowiednich wyników.
- Drugą rzeczą, której potrzebujemy, jest zweryfikowanie naszego wytrenowanego modelu poprzez porównanie jego wyników z pożądanymi lub docelowymi wynikami na podstawie danego zestawu wartości x.
Teraz zrozumiemy, jak mogę włączyć powyższe funkcje do mojego kodu modelu regresji.
Funkcja straty - walidacja modelu
Funkcja straty mierzy, jak bardzo bieżący wynik modelu jest od pożądanego lub docelowego wyniku. W moim modelu regresji liniowej użyję najczęściej używanej funkcji straty o nazwie Suma kwadratów błędu lub SSE. SSE obliczone w.r.t. model wyjściowy (reprezentowany przez model liniowy) i pożądany lub docelowy wynik (y) jako:
y = tf.placeholder (tf.float32) error = linear_model - y squared_errors = tf.square (error) loss = tf.reduce_sum (squared_errors) print (sess.run (strata, {x: [1,2,3,4 ], y: [2, 4, 6, 8]})
Wynik: 90,24
Jak widać, uzyskujemy wysoką wartość strat. Dlatego musimy dostosować nasze wagi (W) i odchylenie (b), aby zmniejszyć otrzymywany błąd.
tf.train API - szkolenie modelu
TensorFlow zapewnia optymalizatory które powoli zmieniają każdą zmienną, aby zminimalizować funkcję straty lub błąd. Najprostszym optymalizatorem jest gradientowe zejście . Modyfikuje każdą zmienną zgodnie z wielkością pochodnej straty w odniesieniu do tej zmiennej.
# Tworzenie instancji optymalizatora zejścia gradientowego = tf.train.GradientDescentOptimizer (0.01) train = optimizer.minimize (strata) for i in range (1000): sess.run (train, {x: [1, 2, 3, 4], y: [2, 4, 6, 8]}) print (sess.run ([W, b]))
Wynik: [tablica ([1.99999964], dtype = float32), tablica ([9.86305167e-07], dtype = float32)]
W ten sposób tworzysz model liniowy za pomocą TensorFlow i trenujesz go, aby uzyskać pożądane wyniki.
Teraz, gdy wiesz już o uczeniu głębokim, zapoznaj się z autorstwa Edureka, zaufanej firmy zajmującej się edukacją online, z siecią ponad 250 000 zadowolonych uczniów rozsianych po całym świecie. Szkolenie Edureka Deep Learning with TensorFlow Certification Training pomaga uczniom stać się ekspertami w szkoleniu i optymalizacji podstawowych i konwolucyjnych sieci neuronowych przy użyciu projektów i zadań w czasie rzeczywistym, wraz z takimi koncepcjami, jak funkcja SoftMax, Auto-encoder Neural Networks, Restricted Boltzmann Machine (RBM).
Masz do nas pytanie? Wspomnij o tym w sekcji komentarzy, a my skontaktujemy się z Tobą.