Czym jest TensorFlow? Jak to działa? ArchiTechnologia i funkcje
⚡ Inteligentne podsumowanie
TensorFlow to platforma typu open source Google Stworzony z myślą o uczeniu maszynowym, reprezentujący każde obliczenie jako graf przepływu danych tensorów. Ten przegląd obejmuje architekturę, komponenty, sposób wykonywania obliczeń oraz sposób przesyłania danych przez potok wejściowy.

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ą biblioteką głębokiego uczenia na świecie jest GoogleTensorFlow. Google stosuje uczenie maszynowe w swoich produktach w celu usprawnienia wyszukiwania, tłumaczeń, tworzenia podpisów pod obrazkami i rekomendacji.
Przykład TensorFlow
Aby podać konkretny przykład, Google Użytkownicy mogą korzystać z szybszego i bardziej precyzyjnego wyszukiwania dzięki sztucznej inteligencji. Jeśli użytkownik wpisze słowo kluczowe w pasku wyszukiwania, Google podaje rekomendację dotyczącą tego, jakie mogłoby być następne słowo.

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 TensorFlow nie tylko przechowuje duże zbiory danych, ale także obsługuje ogromną infrastrukturę obliczeniową, dlatego od samego początku został zaprojektowany z myślą o skalowalności. TensorFlow to biblioteka opracowana przez Google Brain Team przyspieszy badania nad uczeniem maszynowym i głębokimi sieciami neuronowymi.
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 zaczęło przewyższać wszystkie inne algorytmy uczenia maszynowego przy przetwarzaniu ogromnych ilości danych. Google dostrzegła, że może wykorzystać te głębokie sieci neuronowe do ulepszenia swoich usług:
- Gmail
- Photo
- Google Wyszukiwarka
Zbudowali strukturę zwaną TensorFlow tak aby badacze i deweloperzy mogli pracować na tym samym modelu, a następnie wdrożyć go na skalę, z której mogłoby skorzystać wiele osób.
TensorFlow został udostępniony publicznie w listopadzie 2015 r., a wersja 1.0 pojawiła się w lutym 2017 r. Znacznie większa zmiana nastąpiła wraz z TensorFlow 2.0 we wrześniu 2019 r., który uczynił wykonywanie chętne domyślnym i przyjął Keras jako standardowe API wysokiego poziomu. Od wersji 2.16 Keras 3 jest domyślny, a ten sam kod modelu może działać również w JAX lub Py.Torch zaplecza.
TensorFlow jest udostępniany na licencji Apache 2.0, dzięki czemu możesz go używać, modyfikować i rozpowszechniać, także komercyjnie, bez konieczności płacenia Google.
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ę TensorFlow, ponieważ przyjmuje 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.
Gdzie można uruchomić TensorFlow?
Wymagania sprzętowe i programowe TensorFlow dzielą się na dwie fazy:
Faza rozwoju:odbywa się to podczas trenowania modelu, zwykle na komputerze stacjonarnym lub laptopie.
Faza uruchomienia lub wnioskowania:po zakończeniu szkolenia model może działać na wielu platformach:
- 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ć zarówno na procesorach graficznych (GPU), jak i procesorach CPU. Procesory graficzne (GPU) zostały pierwotnie zaprojektowane do gier wideo. Około 2009 roku naukowcy ze Stanford wykazali, że procesory graficzne (GPU) są niezwykle wydajne w operacjach na macierzach i algebrze liniowej, od których zależą sieci neuronowe. Głębokie uczenie (Głębokie uczenie) opiera się w dużej mierze na mnożeniu macierzy. TensorFlow jest bardzo szybki w obliczaniu mnożenia macierzy, ponieważ jest napisany w języku programowania. C++. Chociaż jest zaimplementowany w C++Dostęp do TensorFlow i kontrolowanie go można uzyskać głównie w innych językach, Python.
Kolejną ważną cechą jest to, że Tensorboard, który wizualizuje wykres, metryki szkoleniowe i rozkład wag podczas działania modelu.
Komponenty TensorFlow
napinacz
Nazwa TensorFlow bezpośrednio pochodzi od jego podstawowego frameworka: napinaczW TensorFlow wszystkie obliczenia obejmują tensory. Tensor to 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:
- Działa na wielu procesorach lub kartach graficznych, 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
- Graf ma węzły i krawędzie. Każdy węzeł wykonuje operację matematyczną i generuje wynik, podczas gdy krawędzie opisują relacje wejściowe i wyjściowe między węzłami. Same tensory przemieszczają się wzdłuż krawędzi.
Dlaczego TensorFlow jest popularny?
TensorFlow jest powszechnie stosowany, ponieważ jest dostępny na każdym poziomie zaawansowania. Jego API obejmuje wszystko, od trzyliniowego modelu Keras po ręcznie tworzony CNN lub RNN. Ponieważ obliczenia są wyrażane w postaci grafu, TensorBoard może wizualizować sieć i znacznie ułatwiać debugowanie. Działa również na dużą skalę, działając na procesorach CPU, GPU i TPU, a także na urządzeniach mobilnych za pośrednictwem TensorFlow Lite.
TensorFlow pozostaje jednym z dwóch najczęściej używanych frameworków do głębokiego uczenia się w serwisie GitHub, obok PyTorch.
TensorFlow Algorithms
TensorFlow zawiera estymatory wysokiego poziomu dla kilku klasycznych algorytmów. W TensorFlow 1.x były one dostępne w ramach tf.estimator:
- Regresja liniowa: tf.estimator.LinearRegressor
- Klasyfikacja: tf.estimator.LinearClassifier
- Klasyfikacja głębokiego uczenia się: tf.estimator.DNNClassifier
- Szerokie i głębokie uczenie się: tf.estimator.DNNLinearCombinedClassifier
- Wzmocniona regresja drzewa: tf.estimator.BoostedTreesRegressor
- Wzmocniona klasyfikacja drzewa: tf.estimator.BoostedTreesClassifier
TensorFlow kontra PyTorch: Który powinieneś wybrać?
TensorFlow i PyTorch to dwa dominujące frameworki głębokiego uczenia, a różnice praktyczne znacznie się zmniejszyły, odkąd TensorFlow 2.0 przyjął funkcję szybkiego wykonywania.
| kryteria | TensorFlow | PyTorch |
|---|---|---|
| Opracowany przez | Google Mózg | Meta AI |
| Egzekucja | Chętny, z opcjonalną kompilacją wykresu | Chętny, z opcjonalną kompilacją |
| Interfejs API wysokiego poziomu | Keras, zbudowany w | Oddzielne biblioteki, takie jak Lightning |
| Mobilne i brzegowe | Dojrzały, przez TensorFlow Lite | Ulepszanie poprzez ExecuTorch |
| Wdrożenie przeglądarki | TensorFlow.js | Wymaga konwersji do ONNX |
| Typowa twierdza | Produkcja i wdrażanie | Badania i eksperymenty |
Pragmatyczna odpowiedź: wybierz TensorFlow, gdy model musi być dostarczany na urządzenia mobilne, przeglądarki lub stos zarządzanych usług, a następnie wybierz PyTorch podczas iteracji architektury modelu. Keras 3, domyślny od TensorFlow 2.16, dodatkowo łagodzi decyzję, ponieważ ten sam kod Keras może działać w TensorFlow, JAX lub Py.Torch back-end.
Jak działają obliczenia w TensorFlow
⚠️ Uwaga dotycząca wersji: poniższe przewodniki wykorzystują TensorFlow 1.x styl wykresu i sesji, który jest najwyraźniejszym sposobem, aby zobaczyć, jak faktycznie działa wykres przepływu danych. tf.placeholder(), tf.Session() i make_initializable_iterator() zostały usunięte w TensorFlow 2.0 i spowoduje błąd AttributeError w bieżącej instalacji. Sekcja TensorFlow 1.x kontra TensorFlow 2.x poniżej podano współczesne odpowiedniki każdego przykładu.
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. Stwórzmy graf obliczeniowy mnożący dwie liczby przez siebie.
W tym przykładzie pomnożymy X_1 i X_2 przez siebie. TensorFlow utworzy węzeł łączący te operacje. W naszym przykładzie nazywa się on „mnożenie”. Po wyznaczeniu grafu, silniki obliczeniowe TensorFlow pomnożą przez siebie X_1 i X_2.
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. Tworząc węzeł w TensorFlow, musimy wybrać jego rodzaj. Węzły X1 i X2 będą węzłami zastępczymi. Węzły zastępcze przypisują nową wartość za każdym razem, gdy wykonujemy obliczenia. Utworzymy je jako węzeł zastępczy TF dot.
Krok 1: Zdefiniuj zmienną
X_1 = tf.placeholder(tf.float32, name = "X_1") X_2 = tf.placeholder(tf.float32, name = "X_2")
Symbol zastępczy wymaga typu danych. Są to liczby, więc tf.float32 jest właściwym wyborem. Argument „name” jest opcjonalny, ale przydatny, ponieważ jest etykietą wyświetlaną w wizualizacji TensorBoard grafu. X_2 jest definiowany w ten sam sposób.
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 robi się to za pomocą tf.Session(). Teraz, gdy mamy sesję, możemy poprosić ją o wykonanie operacji na naszym grafie obliczeniowym, wywołując session. Aby uruchomić obliczenia, musimy użyć run.
Podczas wykonywania operacji mnożenia potrzebne są wartości węzłów X_1 i X_2, dlatego wprowadza się je w czasie wykonywania. Można 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 popularne sposoby ładowania danych:
1. Załaduj dane do pamięci:To najprostsza metoda. Ładujesz wszystkie dane do pamięci jako pojedynczą tablicę. Piszesz po prostu Python w tym przypadku nic nie jest specyficzne dla TensorFlow.
2. Przepływ danych TensorFlowTensorFlow oferuje wbudowane API, które ładuje dane, stosuje transformacje i zasila model. Ta metoda sprawdza się szczególnie dobrze w przypadku dużych zbiorów danych. Na przykład rekordy obrazów są znane z tego, że są ogromne i nie mieszczą się w pamięci. Potok 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.
Ładowanie danych 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 takiej sytuacji należy zbudować potok TensorFlow. Potok będzie ładował dane w partiach, czyli małych fragmentach. Każdy partia będzie przesyłany do potoku i gotowy do trenowania. Zbudowanie potoku to doskonałe rozwiązanie, ponieważ pozwala na wykorzystanie obliczeń równoległych. Oznacza to, że TensorFlow będzie trenował model na wielu procesorach. Przyspiesza to obliczenia i umożliwia trenowanie większych sieci.
Krótko mówiąc: ładuj małe zestawy danych do pamięci za pomocą pandas i korzystaj z potoku TensorFlow, gdy danych jest dużo lub gdy chcesz przeprowadzić równoległe ładowanie na wielu procesorach.
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))
[0.8835775 0.23766978]
TensorFlow 1.x kontra TensorFlow 2.x: co się zmieniło
TensorFlow 2.0 był przełomową przeróbką interfejsu API skierowanego do użytkownika. Zrozumienie tej różnicy jest ważne, ponieważ duża część kodu instruktażowego online, w tym powyższe przykłady, jest oparta na stylu 1.x.
| Pojęcie | TensorFlow 1.x | TensorFlow 2.x |
|---|---|---|
| Model wykonania | Zdefiniuj wykres, a następnie go uruchom | Domyślnie chętni, operacje są uruchamiane natychmiast |
| Podawanie danych | tf.placeholder plus feed_dict | Przechodzić Python wartości lub tensory bezpośrednio |
| Operacje bieżące | tf.Session().run() | Wywołanie funkcji, sesja nie jest potrzebna |
| Interfejs API wysokiego poziomu | tf.estimator | Keras, tf.keras |
| Optymalizacja wykresu | Zawsze oparte na grafie | Wybierz opcję za pomocą dekoratora @tf.function |
| Iterowanie zbioru danych | make_initializable_iterator() | Równina Python pętla for na zestawie danych |
Przykład mnożenia, przepisany. Trzy kroki i sesja stają się jednym wierszem, ponieważ operacja wykonuje się w momencie jej wywołania:
import tensorflow as tf X_1 = tf.constant([1, 2, 3], dtype=tf.float32) X_2 = tf.constant([4, 5, 6], dtype=tf.float32) result = tf.multiply(X_1, X_2, name="multiply") print(result.numpy()) # [ 4. 10. 18.]
Przepisano kanał wejściowy. Nie jest wymagany żaden obiekt zastępczy ani obiekt iteratora:
import numpy as np import tensorflow as tf x_input = np.random.sample((1, 2)) dataset = tf.data.Dataset.from_tensor_slices(x_input) for batch in dataset: print(batch.numpy())
Jeśli potrzebujesz szybkości kompilowanego grafu, umieść funkcję w @tf.function i TensorFlow tracŁączy je automatycznie. Starsze skrypty 1.x można również uruchamiać bez zmian za pomocą przestrzeni nazw tf.compat.v1, choć ta ścieżka ma charakter wyłącznie konserwacyjny i nie powinna być używana do nowych prac.
TensorFlow: najważniejsze wnioski i Code Numer Referencyjny
- 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.
- Z TensorFlow korzystają głównie pracownicy naukowi, start-upy i duże firmy. Google używa TensorFlow w prawie wszystkich Google produkty codziennego użytku, w tym Gmail, Zdjęcie i Google Wyszukiwarka.
- Google Zespół Brain opracował TensorFlow, aby zniwelować lukę między badaczami a twórcami produktów. W 2015 roku udostępnili TensorFlow publicznie; jego popularność szybko rośnie. Obecnie TensorFlow jest biblioteką głębokiego uczenia z największą liczbą repozytoriów w serwisie GitHub.
- Praktycy korzystają z TensorFlow, ponieważ można go łatwo wdrożyć na dużą skalę w chmurze, w przeglądarce lub na urządzeniach mobilnych z systemem iOS i Android.
TensorFlow działa w ramach sesji. Każda sesja jest definiowana przez graf z różnymi obliczeniami. Prostym przykładem może być mnożenie przez liczbę. W TensorFlow wymagane są trzy kroki:
- Zdefiniuj zmienną
X_1 = tf.placeholder(tf.float32, name = "X_1") X_2 = tf.placeholder(tf.float32, name = "X_2")
- Zdefiniuj obliczenia
multiply = tf.multiply(X_1, X_2, name = "multiply")
- 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 tworzenie potoku do ładowania danych. Jeśli wykonasz te pięć kroków, będziesz w stanie załadować dane do TensorFlow:
- Utwórz dane
import numpy as np
x_input = np.random.sample((1,2))
print(x_input)
- Utwórz symbol zastępczy
x = tf.placeholder(tf.float32, shape=[1,2], name = 'X')
- Zdefiniuj metodę zbioru danych
dataset = tf.data.Dataset.from_tensor_slices(x)
- Utwórz potok
iterator = dataset.make_initializable_iterator() get_next = iterator.get_next()
- Wykonaj program
with tf.Session() as sess:
sess.run(iterator.initializer, feed_dict={x: x_input})
print(sess.run(get_next))
