Rozpoczęcie pracy z TensorFlow

Rozpoczęcie pracy z TensorFlow
Tensorflow jest dzieckiem mózgu Google, a u jego podstaw jest biblioteką do obliczeń numerycznych. Jest napisany w c/c ++ i ma bardzo elastyczny interfejs API. Ten interfejs API może być połączony z frontem Python, abyś mógł napisać małe fragmenty kodu Pythona, aby rozwiązać skomplikowane problemy. Elastyczny i spójny interfejs API pozwala programistom korzystać z tego samego kodu front-end do działania na różnych platformach, takich jak NVIDIA GPU, procesory ogólne, a nawet urządzenia mobilne i osadzone, z których każda ma zupełnie inną implementację w zapleczu zaplecza.

Tensorflow znalazł ogromne zastosowanie w dziedzinie uczenia maszynowego, właśnie dlatego, że uczenie maszynowe wiąże się z dużą liczbą liczbowych i jest używane jako uogólniona technika rozwiązywania problemów. I chociaż będziemy z nim współdziałać za pomocą Pythona, ma on front-end dla innych języków, takich jak Go, Węzeł.JS, a nawet C#.

Tensorflow jest jak czarna skrzynka, która ukrywa wszystkie matematyczne subtelności w nim, a programista po prostu wywołuje odpowiednie funkcje, aby rozwiązać problem. Ale jaki problem?

Uczenie maszynowe (ML)

Załóżmy, że projektujesz bota, aby zagrać w grę w szachy. Ze względu na sposób, w jaki szacha jest projektowana, sposób poruszania się kawałków i dobrze zdefiniowanego celu gry, jest całkiem możliwe napisanie programu, który bardzo dobrze grałby w tę grę. W rzeczywistości przechytnie całą ludzkość w szachach. Wiedziałoby dokładnie, jaki ruch musi wykonać, biorąc pod uwagę stan wszystkich elementów na planszy.

Jednak taki program może grać tylko w szachy. Zasady gry są upieczone w logice kodu, a wszystko, co robi program, jest wykonywana ta logika rygorystycznie i dokładniej niż jakikolwiek człowiek. Nie jest to algorytm ogólnego celu, którego można użyć do zaprojektowania dowolnego bota gier.

W przypadku uczenia maszynowego, zmiany paradygmatu i algorytmy stają się coraz bardziej ogólne.

Pomysł jest prosty, zaczyna się od zdefiniowania problemu klasyfikacyjnego. Na przykład chcesz zautomatyzować proces identyfikacji gatunków pająków. Gatunki, które są ci znane, są różnymi klasami (nie należy mylić z klasami taksonomicznymi), a celem algorytmu jest sortowanie nowego nieznanego obrazu na jedną z tych klas.

Tutaj pierwszym krokiem dla człowieka byłoby określenie cech różnych indywidualnych pająków. Dostarczylibyśmy dane o długości, szerokości, masie ciała i kolorze poszczególnych pająków wraz z gatunkami, do których należą:

Długość Szerokość Masa Kolor Tekstura Gatunek
5 3 12 brązowy gładki Tatusia długie nogi
10 8 28 Brązowo-czarny włochaty Tarantula

Posiadanie dużego zbioru takich indywidualnych danych pająka zostanie wykorzystane do „szkolenia” algorytmu, a kolejny podobny zestaw danych zostanie wykorzystany do testowania algorytmu, aby zobaczyć, jak dobrze jest w stosunku do nowych informacji, których nigdy wcześniej nie spotkał, ale które już znamy Odpowiedz.

Algorytm rozpocznie się w losowy sposób. To znaczy, każdy pająk bez względu na jego cechy byłby klasyfikowany jako każdy z gatunków. Jeśli w naszym zestawie danych jest 10 różnych gatunków, ten naiwny algorytm otrzymałby prawidłową klasyfikację w około 1/10 czasu.

Ale wtedy aspekt uczenia maszynowego zacząłby przejmować. Zacząłoby kojarzyć pewne cechy z pewnym wynikiem. Na przykład owłosione pająki prawdopodobnie będą Tarantulas, podobnie jak większe pająki. Więc ilekroć pojawia się nowy pająk, który jest duży i owłosiony. Zauważ, że nadal pracujemy z prawdopodobieństwami, ponieważ z natury pracujemy z algorytmem probabilistycznym.

Część uczenia się działa poprzez zmianę prawdopodobieństwa. Początkowo algorytm zaczyna się od losowego przypisania etykiet „gatunku” osobom, tworząc losowe korelacje, takie jak „owłosione” i bycie „tatusiem długimi nogami”. Kiedy tworzy taką korelację, a zestaw danych szkoleniowych nie wydaje się z tym zgadzać, założenie jest upuszczane.

Podobnie, gdy korelacja działa dobrze poprzez kilka przykładów, za każdym razem staje się silniejsza. Ta metoda potykania się o prawdę jest niezwykle skuteczna, dzięki wielu matematycznym subtelnościom, które jako początkujący nie chciałbyś się martwić.

Tensorflow i szkolenie własnego klasyfikatora kwiatów

Tensorflow jeszcze bardziej pomysłem uczenia maszynowego. W powyższym przykładzie byłeś odpowiedzialny za określanie cech, które odróżnia jeden gatunek pająka od drugiego. Musieliśmy zmierzyć poszczególne pająki starannie i stworzyć setki takich zapisów.

Ale możemy zrobić lepiej, dostarczając tylko surowe dane obrazu do algorytmu, możemy pozwolić algorytmowi znaleźć wzorce i zrozumieć różne rzeczy na temat obrazu, takie jak rozpoznawanie kształtów na obrazie , itd. itp. Jest to początkowe pojęcie wizji komputerowej i możesz go używać również do innych danych wejściowych, takich jak sygnały audio i szkolenie algorytmu do rozpoznawania głosu. Wszystko to znajduje się pod parasolem „głębokiego uczenia się”, w którym uczenie maszynowe jest przenoszone do logicznej skrajności.

Ten uogólniony zestaw pojęć można następnie wyspecjalizować w radzeniu sobie z wieloma obrazami kwiatów i kategoryzując je.

W poniższym przykładzie będziemy używać Python2.7 Front-end do interfejsu z TensorFlow, a my będziemy używać PIP (nie PIP3) do zainstalowania TensorFlow. Wsparcie Python 3 jest nadal trochę wózków.

Aby stworzyć własny klasyfikator obrazu, najpierw za pomocą TENSORFLOWmy, zainstalujmy go za pomocą pypeć:

$ pip instaluj tensorflow

Następnie musimy sklonować Tensorflow-for-Poets-2 Repozytorium Git. To naprawdę dobre miejsce na rozpoczęcie z dwóch powodów:

  1. Jest to proste i łatwe w użyciu
  2. W pewnym stopniu jest wstępnie wyszkolony. Na przykład klasyfikator kwiatów jest już wyszkolony, aby zrozumieć, na jaką teksturę patrzy i na jakie kształty patrzy, więc jest mniej intensywny obliczeniowo.

Zdobądźmy repozytorium:

$ git clone https: // github.com/googlecodelabs/tensorflow-for-poets-2
$ CD Tensorflow-for-Poets-2

To będzie nasz katalog roboczy, więc wszystkie polecenia powinny być wydawane od niego, odtąd.

Nadal musimy wyszkolić algorytm w zakresie konkretnego problemu rozpoznawania kwiatów, ponieważ potrzebujemy danych treningowych, więc zdobądźmy:

$ curl http: // pobierz.Tensorflow.org/example_images/flower_photos.TGZ
|. tar xz -c tf_files

Katalog… ./Tensorflow-for-Poets-2/tf_files zawiera tonę tych obrazów odpowiednio oznaczone i gotowe do użycia. Obrazy będą do dwóch różnych celów:

  1. Szkolenie programu ML
  2. Testowanie programu ML

Możesz sprawdzić zawartość folderu TF_FILES I tutaj przekonasz się, że zawężamy tylko 5 kategorii kwiatów, a mianowicie stokrotek, tulipanów, słoneczników, mniszka lekarskiego i róż.

Szkolenie modelu

Możesz rozpocząć proces szkolenia, najpierw skonfigurowanie następujących stałych w celu zmiany rozmiaru wszystkich obrazów wejściowych na standardowy rozmiar i przy użyciu lekkiej architektury MobileNet:

$ Image_size = 224
$ Architekture = "mobilenenet_0.50 _ $ image_size ”

Następnie wywołaj skrypt Pythona, uruchamiając polecenie:

Skrypty $ Python -m.Przekształcenie \
--Bantleneck_dir = tf_files/BottleCks \
--how_many_training_steps = 500 \
--model_dir = tf_files/ modele/ \
--Summaries_dir = tf_files/trening_summaries/"$ architektura" \
--output_graph = tf_files/onered_graph.PB \
--Output_labels = tf_files/onered_labels.tekst \
--architektura = "$ architektura" \
--image_dir = tf_files/flower_photos

Chociaż określono tutaj wiele opcji, większość z nich określa Twoje dane wejściowe i liczbę iteracji, a także pliki wyjściowe, w których informacje o nowym modelu byłyby przechowywane. Nie powinno to trwać dłużej niż 20 minut na miernym laptopie.

Gdy skrypt zakończy zarówno szkolenie, jak i testowanie, da ci oszacowanie dokładności wyszkolonego modelu, który w naszym przypadku był nieco wyższy niż 90%.

Korzystanie z wyszkolonego modelu

Jesteś teraz gotowy do użycia tego modelu do rozpoznawania obrazu każdego nowego obrazu kwiatu. Będziemy używać tego obrazu:

Twarz słonecznika jest ledwo widoczna i jest to wielkie wyzwanie dla naszego modelu:

Aby uzyskać ten obraz z Wikimedia Commons, użyj wget:

$ wget https: // prześlij.Wikimedia.org/wikipedia/commons/2/28/sunflower_head_2011_g1.jpg
$ mv Sunflower_head_2011_g1.jpg tf_files/nieznany.jpg

Jest zapisany jako nieznany.jpg pod TF_FILES Podkazkodmienia.

Teraz, na chwilę prawdy, zobaczymy, co nasz model ma do powiedzenia na temat tego obrazu.Aby to zrobić, wzywamy label_image scenariusz:

Skrypty $ Python -m.label_image --Graph = tf_files/onered_graph.pb --
obraz = tf_files/nieznany.jpg

Otrzymasz wyjście podobne do tego:

Liczby obok typu kwiatu reprezentują prawdopodobieństwo, że nasz nieznany obraz należy do tej kategorii. Na przykład jest to 98.04% pewne, że obraz jest słonecznika i jest tylko 1.37% szans, że będzie różą.

Wniosek

Nawet przy bardzo miernych zasobach obliczeniowych widzimy oszałamiającą dokładność w identyfikowaniu obrazów. To wyraźnie pokazuje moc i elastyczność tensorflow.

Odtąd możesz zacząć eksperymentować z różnymi innymi rodzajami danych wejściowych lub spróbować zapisywać własną aplikację za pomocą Python i TensorFlow. Jeśli chcesz wiedzieć, że wewnętrzne działanie uczenia maszynowego trochę lepiej tutaj jest interaktywny sposób, aby to zrobić.