Co to jest TensorFlow? Jak to działa? Wstęp & Architektura

Zacznijmy ten samouczek od wprowadzenia TensorFlow:

Co to jest TensorFlow?

TensorFlow jest otwartą platformą end-to-end do tworzenia aplikacji uczenia maszynowego. Jest to symboliczna biblioteka matematyczna, która wykorzystuje przepływ danych i programowanie różniczkowalne do wykonywania różnych zadań skupionych na szkoleniu i wnioskowaniu głębokich sieci neuronowych. Umożliwia programistom tworzenie aplikacji uczenia maszynowego przy użyciu różnych narzędzi, bibliotek i zasobów społeczności.

Obecnie najsłynniejszą na świecie biblioteką do głębokiego uczenia się jest Google TensorFlow. Produkt Google wykorzystuje uczenie maszynowe we wszystkich swoich produktach, aby ulepszyć wyszukiwarkę, tłumaczenie, podpisy obrazów i rekomendacje.

Przykład TensorFlow

Aby podać konkretny przykład, użytkownicy Google mogą korzystać z szybszego i bardziej wyrafinowanego wyszukiwania dzięki sztucznej inteligencji. Jeśli użytkownik wpisze słowo kluczowe w pasku wyszukiwania, Google wyświetli rekomendację dotyczącą następnego słowa.

Przykład TensorFlow
Przykład TensorFlow

Google chce wykorzystać uczenie maszynowe, aby wykorzystać swoje ogromne zbiory danych i zapewnić użytkownikom jak najlepsze doświadczenia. Trzy różne grupy korzystają z uczenia maszynowego:

  • Badacze
  • Naukowcy zajmujący się danymi
  • Programiści

Wszyscy mogą używać tego samego zestawu narzędzi do współpracy ze sobą i zwiększania swojej wydajności.

Google nie dysponuje jedynie danymi; mają najmasywniejszy komputer na świecie, dlatego Tensor Flow został zbudowany z myślą o skalowaniu. TensorFlow to biblioteka opracowana przez zespół Google Brain w celu przyspieszenia uczenia maszynowego i badań głębokich sieci neuronowych.

Został stworzony do działania na wielu procesorach CPU lub GPU, a nawet mobilnych systemach operacyjnych i ma kilka wrapperów w różnych językach, takich jak Python, C++ or Java.

Historia TensorFlow

Kilka lat temu głębokie uczenie się zaczęło przewyższać wszystkie inne algorytmy uczenia maszynowego, gdy dostarczały ogromną ilość danych. Google zauważyło, że może wykorzystać te głębokie sieci neuronowe do ulepszenia swoich usług:

  • gmail
  • Zdjęcie
  • Wyszukiwarka Google

Budują strukturę zwaną Tensorflow aby umożliwić naukowcom i programistom wspólną pracę nad modelem sztucznej inteligencji. Po opracowaniu i skalowaniu umożliwia korzystanie z niego wielu osobom.

Po raz pierwszy został upubliczniony pod koniec 2015 roku, natomiast pierwsza stabilna wersja pojawiła się w 2017 roku. Jest to oprogramowanie typu open source na licencji Apache Open Source. Możesz z niego korzystać, modyfikować go i rozpowszechniać zmodyfikowaną wersję za opłatą, nie płacąc nic Google.

W tym samouczku na temat głębokiego uczenia się TensorFlow poznamy architekturę TensorFlow i sposób działania TensorFlow.

Jak działa TensorFlow

TensorFlow umożliwia tworzenie grafów i struktur przepływu danych, aby zdefiniować sposób, w jaki dane przemieszczają się przez graf, przyjmując dane wejściowe jako wielowymiarową tablicę zwaną Tensor. Umożliwia to skonstruowanie schematu blokowego operacji, które można wykonać na tych danych wejściowych, który przechodzi z jednego końca i trafia z drugiego końca jako dane wyjściowe.

TensorFlow Architektura

Architektura Tensorflow składa się z trzech części:

  • Wstępne przetwarzanie danych
  • Zbuduj model
  • Wytrenuj i oszacuj model

Nazywa się to Tensorflow, ponieważ pobiera dane wejściowe w postaci tablicy wielowymiarowej, znanej również jako tensory. Można skonstruować coś w rodzaju schemat blokowy operacji (nazywanych Grafem), które chcesz wykonać na tym wejściu. Wejście wchodzi na jednym końcu, a następnie przepływa przez ten system wielu operacji i wychodzi na drugim końcu jako wyjście.

Dlatego nazywa się to TensorFlow, ponieważ tensor wchodzi, przepływa przez listę operacji, a następnie wychodzi po drugiej stronie.

Gdzie można biegać Tensorflow?

sprzęt TensorFlow i Wymagania Systemowe można podzielić na

Faza rozwoju: To jest moment, w którym szkolisz ten tryb. Szkolenie odbywa się zwykle na komputerze stacjonarnym lub laptopie.

Faza uruchamiania lub faza wnioskowania: Po zakończeniu szkolenia Tensorflow można uruchomić na wielu różnych platformach. Możesz to uruchomić

  • Uruchomiony pulpit Windows, macOS lub Linuksa
  • Chmura jako usługa internetowa
  • Urządzenia mobilne, takie jak iOS i Android

Możesz go trenować na wielu maszynach, a następnie uruchomić go na innej maszynie, gdy już będziesz mieć przeszkolony model.

Model można trenować i używać na procesorach graficznych, jak i procesorach CPU. Procesory graficzne zostały pierwotnie zaprojektowane do gier wideo. Pod koniec 2010 roku naukowcy ze Stanford odkryli, że procesory graficzne są również bardzo dobre w operacjach na macierzach i algebrze, co czyni je bardzo szybkimi w wykonywaniu tego typu obliczeń. Głębokie uczenie się opiera się na dużej ilości mnożenia macierzy. TensorFlow jest bardzo szybki w obliczaniu mnożenia macierzy, ponieważ jest napisany w C++. Chociaż jest zaimplementowany w C++Dostęp do TensorFlow i kontrolowanie go można uzyskać głównie w innych językach, Python.

Wreszcie istotną cechą TensorFlow jest TensorBoard. The Tensorboard umożliwia graficzne i wizualne monitorowanie tego, co robi TensorFlow.

Komponenty TensorFlow

napinacz

Nazwa Tensorflow wywodzi się bezpośrednio z jego podstawowego szkieletu: napinacz. W Tensorflow wszystkie obliczenia wykorzystują tensory. Tensor to a wektor or matryca n-wymiarów reprezentujących wszystkie typy danych. Wszystkie wartości w tensorze zawierają identyczny typ danych ze znanym (lub częściowo znanym) kształt. Kształt danych to wymiar macierzy lub tablicy.

Tensor może pochodzić z danych wejściowych lub wyniku obliczeń. W TensorFlow wszystkie operacje są przeprowadzane wewnątrz wykres. Graf to zbiór obliczeń, które odbywają się kolejno. Każda operacja nazywana jest węzeł operacyjny i są ze sobą połączone.

Wykres przedstawia operacje i połączenia między węzłami. Jednak nie wyświetla wartości. Krawędź węzłów jest tensorem, tj. sposobem na wypełnienie operacji danymi.

Wykresy

TensorFlow korzysta ze struktury grafów. Wykres gromadzi i opisuje wszystkie obliczenia serii wykonane podczas treningu. Wykres ma wiele zalet:

  • Został stworzony do działania na wielu procesorach CPU lub GPU, a nawet w systemach operacyjnych urządzeń mobilnych
  • Przenośność grafu pozwala na zachowanie obliczeń do natychmiastowego lub późniejszego wykorzystania. Graf można zapisać, aby wykonać go w przyszłości.
  • Wszystkie obliczenia na wykresie przeprowadza się poprzez połączenie tensorów
    • Tensor ma węzeł i krawędź. Węzeł wykonuje operację matematyczną i generuje punkty końcowe. Krawędzie wyjaśniają relacje wejścia/wyjścia między węzłami.

Dlaczego TensorFlow jest popularny?

TensorFlow jest najlepszą biblioteką ze wszystkich, ponieważ jest zbudowana tak, aby była dostępna dla każdego. Biblioteka TensorFlow zawiera różne API do budowania na skalę architektury głębokiego uczenia, takiej jak CNN lub RNN. TensorFlow opiera się na obliczeniach grafowych; pozwala deweloperowi wizualizować konstrukcję sieci neuronowej za pomocą Tensorboad. To narzędzie jest pomocne w debugowaniu programu. Wreszcie, TensorFlow jest zbudowany tak, aby można go było wdrażać na skalę. Działa na CPU i GPU.

Tensorflow cieszy się największą popularnością w GitHubie w porównaniu do innych platform głębokiego uczenia się.

TensorFlow Algorithms

Poniżej przedstawiono algorytmy obsługiwane przez TensorFlow:

Obecnie TensorFlow 1.10 ma wbudowane API dla:

  • Regresja liniowa: tf.estimator.LinearRegressor
  • Klasyfikacja: tf.estimator.LinearClassifier
  • Klasyfikacja głębokiego uczenia się: tf.estimator.DNNClassifier
  • Głębokie czyszczenie i głębokie uczenie się: tf.estimator.DNNLinearCombinedClassifier
  • Regresja drzewa wzmacniającego: tf.estimator.BoostedTreesRegressor
  • Wzmocniona klasyfikacja drzewa: tf.estimator.BoostedTreesClassifier

Jak działają obliczenia w TensorFlow

import numpy as np
import tensorflow as tf

W pierwszych dwóch wierszach kodu zaimportowaliśmy tensorflow jako tf. Z Python, powszechną praktyką jest używanie krótkiej nazwy biblioteki. Zaletą jest uniknięcie wpisywania pełnej nazwy biblioteki, gdy musimy z niej skorzystać. Na przykład możemy zaimportować tensorflow jako tf i wywołać tf, gdy chcemy użyć funkcji tensorflow

Przećwiczmy podstawowy przepływ pracy TensorFlow na prostych przykładach TensorFlow. Utwórzmy graf obliczeniowy, który mnoży dwie liczby.

W tym przykładzie pomnożymy X_1 i X_2. Tensorflow utworzy węzeł łączący operację. W naszym przykładzie nazywa się to multiply. Gdy graf zostanie określony, silniki obliczeniowe Tensorflow pomnożą X_1 i X_2.

Obliczenia działają w TensorFlow
Przykład TensorFlow

Na koniec uruchomimy sesję TensorFlow, która uruchomi wykres obliczeniowy z wartościami X_1 i X_2 i wydrukuje wynik mnożenia.

Zdefiniujmy węzły wejściowe X_1 i X_2. Kiedy tworzymy węzeł w Tensorflow, musimy wybrać, jaki rodzaj węzła utworzyć. Węzły X1 i X2 będą węzłami zastępczymi. Symbol zastępczy przypisuje nową wartość za każdym razem, gdy wykonujemy obliczenia. Stworzymy je jako węzeł zastępczy kropki TF.

Krok 1: Zdefiniuj zmienną

X_1 = tf.placeholder(tf.float32, name = "X_1")
X_2 = tf.placeholder(tf.float32, name = "X_2")

Kiedy tworzymy węzeł zastępczy, musimy przekazać typ danych, który będzie tutaj dodawał liczby, więc możemy użyć typu danych zmiennoprzecinkowych, użyjmy tf.float32. Musimy również nadać temu węzłowi nazwę. Ta nazwa pojawi się, gdy spojrzymy na graficzne wizualizacje naszego modelu. Nazwijmy ten węzeł X_1, przekazując parametr o nazwie name z wartością X_1, a teraz zdefiniujmy X_2 w ten sam sposób. X_2.

Krok 2: Zdefiniuj obliczenia

multiply = tf.multiply(X_1, X_2, name = "multiply")

Teraz możemy zdefiniować węzeł, który wykonuje operację mnożenia. W Tensorflow możemy to zrobić, tworząc węzeł tf.multiply.

Przekażemy węzły X_1 i X_2 do węzła mnożenia. Mówi tensorflowowi, aby połączył te węzły na wykresie obliczeniowym, dlatego prosimy go o pobranie wartości z x i y i pomnożenie wyniku. Nadajmy także węzłowi mnożenia nazwę multiply. Jest to cała definicja naszego prostego wykresu obliczeniowego.

Krok 3: Wykonaj operację

Aby wykonać operacje na grafie, musimy utworzyć sesję. W Tensorflow odbywa się to za pomocą tf.Session(). Teraz, gdy mamy sesję, możemy poprosić sesję o wykonanie operacji na naszym grafie obliczeniowym, wywołując session. Aby wykonać obliczenia, musimy użyć run.

Gdy operacja dodawania zostanie uruchomiona, zauważy, że musi pobrać wartości węzłów X_1 i X_2, więc musimy również wprowadzić wartości dla X_1 i X_2. Możemy to zrobić, podając parametr o nazwie feed_dict. Przekazujemy wartości 1,2,3 dla X_1 i 4,5,6 dla X_2.

Wyniki drukujemy za pomocą print(result). Powinniśmy zobaczyć 4, 10 i 18 dla 1×4, 2×5 i 3×6

X_1 = tf.placeholder(tf.float32, name = "X_1")
X_2 = tf.placeholder(tf.float32, name = "X_2")

multiply = tf.multiply(X_1, X_2, name = "multiply")

with tf.Session() as session:
    result = session.run(multiply, feed_dict={X_1:[1,2,3], X_2:[4,5,6]})
    print(result)
[ 4. 10. 18.]

Opcje ładowania danych do TensorFlow

Pierwszy krok przed treningiem a algorytm uczenia maszynowego polega na załadowaniu danych. Istnieją dwa typowe sposoby ładowania danych:

1. Załaduj dane do pamięci: To najprostsza metoda. Ładujesz wszystkie dane do pamięci jako pojedynczą tablicę. Możesz napisać A Python kod. Te linie kodu nie są powiązane z Tensorflow.

2. Potok danych Tensorflow: Tensorflow ma wbudowane API, które pomaga w łatwym ładowaniu danych, wykonywaniu operacji i zasilaniu algorytmu uczenia maszynowego. Ta metoda działa bardzo dobrze, zwłaszcza gdy masz duży zestaw danych. Na przykład wiadomo, że rekordy obrazów są ogromne i nie mieszczą się w pamięci. Przepływ danych sam zarządza pamięcią

Jakie rozwiązanie zastosować?

Załaduj dane do pamięci

Jeśli Twój zbiór danych nie jest zbyt duży, tj. mniejszy niż 10 gigabajtów, możesz zastosować pierwszą metodę. Dane mogą zmieścić się w pamięci. Do importowania plików CSV możesz użyć słynnej biblioteki o nazwie Pandas. Więcej o pandach dowiesz się w następnym tutorialu.

Załaduj dane za pomocą potoku Tensorflow

Druga metoda działa najlepiej, jeśli masz duży zbiór danych. Na przykład, jeśli masz zbiór danych o wielkości 50 gigabajtów, a komputer ma tylko 16 gigabajtów pamięci, maszyna ulegnie awarii.

W tej sytuacji musisz zbudować potok Tensorflow. Potok załaduje dane partiami lub małymi porcjami. Każda partia zostanie wypchnięta do rurociągu i będzie gotowa do szkolenia. Budowa potoku jest doskonałym rozwiązaniem, ponieważ pozwala na wykorzystanie obliczeń równoległych. Oznacza to, że Tensorflow będzie trenował model na wielu procesorach. Ułatwia obliczenia i pozwala na uczenie potężnych sieci neuronowych.

W kolejnych tutorialach dowiesz się, jak zbudować znaczący potok zasilający sieć neuronową.

Krótko mówiąc, jeśli masz mały zbiór danych, możesz załadować dane do pamięci za pomocą biblioteki Pandas.

Jeśli masz duży zbiór danych i chcesz korzystać z wielu procesorów, wygodniej będzie Ci pracować z potokiem Tensorflow.

Jak utworzyć potok TensorFlow

Oto kroki, aby utworzyć potok TensorFlow:

W poprzednim przykładzie ręcznie dodaliśmy trzy wartości dla X_1 i X_2. Teraz zobaczymy jak załadować dane do Tensorflow:

Krok 1) Utwórz dane

Przede wszystkim użyjmy biblioteki numpy do wygenerowania dwóch losowych wartości.

import numpy as np
x_input = np.random.sample((1,2))
print(x_input)

[[0.8835775 0.23766977]]

Krok 2) Utwórz symbol zastępczy

Podobnie jak w poprzednim przykładzie tworzymy symbol zastępczy o nazwie X. Musimy jawnie określić kształt tensora. W takim przypadku załadujemy tablicę zawierającą tylko dwie wartości. Kształt możemy zapisać jako kształt=[1,2]

# using a placeholder
x = tf.placeholder(tf.float32, shape=[1,2], name = 'X')

Krok 3) Zdefiniuj metodę zbioru danych

Następnie musimy zdefiniować zbiór danych, w którym możemy wypełnić wartość symbolu zastępczego x. Musimy skorzystać z metody tf.data.Dataset.from_tensor_slices

dataset = tf.data.Dataset.from_tensor_slices(x)

Krok 4) Utwórz potok

W kroku czwartym musimy zainicjować potok, którym będą przepływać dane. Musimy utworzyć iterator za pomocą make_initializable_iterator. Nazywamy to iteratorem. Następnie musimy wywołać ten iterator, aby podać następną partię danych, get_next. Nazywamy ten krok get_next. Należy zauważyć, że w naszym przykładzie istnieje tylko jedna partia danych zawierająca tylko dwie wartości.

iterator = dataset.make_initializable_iterator() 
get_next = iterator.get_next()

Krok 5) Wykonaj operację

Ostatni krok jest podobny do poprzedniego przykładu. Inicjujemy sesję i uruchamiamy iterator operacji. Podajemy feed_dict wartością wygenerowaną przez tępy. Te dwie wartości wypełnią symbol zastępczy x. Następnie uruchamiamy get_next, aby wydrukować wynik.

with tf.Session() as sess:
    # feed the placeholder with data
    sess.run(iterator.initializer, feed_dict={ x: x_input }) 
    print(sess.run(get_next)) # output [ 0.52374458  0.71968478]
[0.8835775  0.23766978]

Podsumowanie

  • Znaczenie TensorFlow: TensorFlow to najsłynniejsza biblioteka do głębokiego uczenia się ostatnich lat. Praktyk korzystający z TensorFlow może zbudować dowolną strukturę głębokiego uczenia się, taką jak CNN, RNN lub prosta sztuczna sieć neuronowa.
  • TensorFlow jest najczęściej używany przez naukowców, startupy i duże firmy. Google używa TensorFlow w niemal wszystkich codziennych produktach Google, w tym Gmail, Photo i Google Search Engine.
  • Zespół Google Brain opracował TensorFlow, aby wypełnić lukę między badaczami a twórcami produktów. W 2015 r. upublicznili TensorFlow; jego popularność szybko rośnie. Obecnie TensorFlow jest biblioteką głębokiego uczenia z największą liczbą repozytoriów w GitHub.
  • Praktycy korzystają z Tensorflow, ponieważ można go łatwo wdrożyć na dużą skalę. Jest przeznaczony do pracy w chmurze lub na urządzeniach mobilnych, takich jak iOS i Android.

Tensorflow działa w sesji. Każda sesja jest definiowana przez wykres z różnymi obliczeniami. Prostym przykładem może być mnożenie przez liczbę. W Tensorflow wymagane są trzy kroki:

  1. Zdefiniuj zmienną
X_1 = tf.placeholder(tf.float32, name = "X_1")
X_2 = tf.placeholder(tf.float32, name = "X_2")
  1. Zdefiniuj obliczenia
multiply = tf.multiply(X_1, X_2, name = "multiply")
  1. Wykonaj operację
with tf.Session() as session:
result = session.run(multiply, feed_dict={X_1:[1,2,3], X_2:[4,5,6]})
print(result)

Jedną z powszechnych praktyk w Tensorflow jest utworzenie potoku do ładowania danych. Jeśli wykonasz te pięć kroków, będziesz mógł załadować dane do TensorFLow:

  1. Utwórz dane
import numpy as np
x_input = np.random.sample((1,2))
print(x_input)
  1. Utwórz symbol zastępczy
x = tf.placeholder(tf.float32, shape=[1,2], name = 'X')
  1. Zdefiniuj metodę zbioru danych
dataset = tf.data.Dataset.from_tensor_slices(x)
  1. Utwórz potok
iterator = dataset.make_initializable_iterator() get_next = iterator.get_next()
  1. Wykonaj program
with tf.Session() as sess:  
sess.run(iterator.initializer, feed_dict={ x: x_input })  
print(sess.run(get_next))