TensorFlow – kalendarz adwentowy #13

Możliwe, że masz już GPU zdolne do wspierania trenowania głębokich sieci neuronowych. Znasz już może nawet Pythona i Scikit-Learn. Co dalej? Okazuje się, że brakuje Ci tutaj jeszcze jednego elementu układanki. Współczesnego i zoptymalizowanego do wykorzystywania GPU frameworku odpowiedzialnego za trenowanie i używanie głębokich sieci neuronowych. Jednym z takich frameworków jest TensorFlow.

Czym jest Tensor w TensorFlow?

Nazwa TensorFlow składa się z dwóch słówek — Tensor i Flow. To drugie jest prostsze. Chodzi w nim o przepływ, transformacje, manipulowanie i przetwarzanie obiektu Tensor. Ale czym więc jest ten Tensor? Jeżeli miałeś do czynienia z jakąś fizyką na studiach, to pewnie obiło Ci się o uszy to pojęcie. Nie będę wdawał się tutaj w szczegóły, ale ogólnie chodzi o to, że tensory to obiekty matematyczne, które w zależności od rzędu są bardziej lub mniej złożone. Tensor rzędu 0 to liczba. Tensor rzędu 1 to wektor, a tensor rzędu 2 to macierz. Tak w pewnym uproszczeniu.

Z punktu widzenia programowania nazwa TensorFlow jest w mojej opinii trochę przekombinowana. Bo jeśli myślimy o działaniach algebraicznych na macierzach i wektorach niepołączonych ze zjawiskami fizycznymi lub niebędącymi abstrakcjami matematycznymi wyższych rzędów, to na ogół nazywamy je po prostu macierzami i wektorami. Ale pewnie nazwy związane z wektorami i macierzami były już zajęte, więc ktoś to po prostu uogólnił. Nie ma więc tutaj nic magicznego.

Opóźnione wykonanie

Jeżeli pracujesz z językiem programowania Python, szczególnie w notatnikach Jupyter, to jesteś przyzwyczajony do wykonywania kodu krok po kroku. Jedynymi praktycznymi wyjątkami są wtedy funkcje, które muszą być wywołane, żeby wykonać ich wewnętrzny kod.

Praca z TensorFlow przypomina nieco pracę z funkcjami. Jako że ten framework jest w stanie sobie samodzielnie zoptymalizować prace, trzeba nieco zmienić sposób myślenia. Najpierw definiujemy operacje, które chcemy wykonać i procesy, w które chcemy je spiąć. Dopiero gdy mamy mniej więcej zakodowany plan działania, wysyłamy wtedy do TF sygnał start i nasz kod zaczyna się wykonywać. Przypomina to trochę przetwarzanie wsadowe. Nie jest to absolutnie nic nowego w programowaniu, jednak czasem można zapomnieć o takim rodzaju pracy.

Keras

Praca z TensorFlow może być bardzo wymagająca i zupełnie nieintuicyjna. Nie jest to zły framework, nie powstał jednak z myślą o początkujących. Jak to jednak w świecie open source bywa, jeśli coś jest przydatne, ale ma ostre krawędzie, to ktoś to prędzej lub później opakuje w taki sposób, żeby spodobał się większej ilości osób. W podobny sposób możesz myśleć o frameworku Keras. Powstał on co prawda wcześniej niż TensorFlow i miał samodzielnie dostarczać silnik do obsługi sieci neuronowych. Okazało się chyba jednak, że jego twórcom wygodniej będzie podpiąć inne silniki do sieci neuronowych, które będą działać pod spodem. Mam więc bardziej przystępny framework obsługujący sieci neuronowe (tak jakby karoseria), a pod spodem mamy do wyboru kilka silników renderujących (po prostu silnik). Aktualnie są to wspomniany TensorFlow (którego notabene sponsorem jest Google), CNTK (sponsorowany przez Microsoft) oraz Theano (sponsorowane przez uniwersytet w Montrealu). Mamy więc pewną swobodę w wyborze narzędzi.

TensorFlow — Podsumowanie

Jeżeli zaczynasz przygodę z sieciami neuronowymi, to raczej nie powinieneś zaczynać od razu od TensorFlow. Jest to potężny i elastyczny framework, jest jednak trudny do opanowania. Lepiej zainwestować swój czas np. we wspomniany framework Keras. Jeśli jednak czas nauki i eksperymentowania masz już za sobą, a zależy Ci na wyciśnięciu ostatnich potów z GPU oraz przygotowanie stabilnego i gotowego na przyszłość środowiska produkcyjnego, to zgłębienie tajników TS może okazać się przydatne. Ale który to będzie moment, to już musisz zadecydować sam.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *