TensorFlow

Početak rada s TensorFlowom

Početak rada s TensorFlowom
TensorFlow je Googleovo dijete mozga i u svojoj je osnovi knjižnica za numeričko računanje. Napisan je na C / C ++ i ima vrlo fleksibilan API. Ovaj se API može povezati s prednjim dijelom Pythona, tako da možete pisati male isječke Python koda za rješavanje složenih problema. Fleksibilni i dosljedni API također omogućava programerima da koriste isti prednji kôd za pokretanje na raznim platformama poput Nvidia GPU-a, CPU-a opće namjene, pa čak i mobilnih i ugrađenih uređaja, od kojih svaki ima vrlo različitu implementaciju u pozadini.

TensorFlow je našao neizmjernu uporabu na polju strojnog učenja, upravo zato što strojno učenje uključuje puno zgušnjavanja brojeva i koristi se kao generalizirana tehnika rješavanja problema. Iako ćemo s njim komunicirati pomoću Pythona, on ima prednje krajeve za druge jezike poput Go, Node.js, pa čak i C #.

Tensorflow je poput crne kutije koja u sebi skriva sve matematičke suptilnosti, a programer samo poziva prave funkcije za rješavanje problema. Ali kakav problem?

Strojno učenje (ML)

Pretpostavimo da dizajnirate bota koji će igrati partiju šaha. Zbog načina dizajniranja šaha, načina kretanja figura i dobro definiranog cilja igre, sasvim je moguće napisati program koji bi igrao igru ​​izuzetno dobro. Zapravo bi nadmudrio čitav ljudski rod u šahu. Znao bi točno koji potez treba povući s obzirom na stanje svih dijelova na ploči.

Međutim, takav program može igrati samo šah. Pravila igre uklapaju se u logiku koda i sve što taj program radi je da tu logiku izvršava strože i preciznije nego što bi to mogao bilo koji čovjek. To nije općeniti algoritam koji možete koristiti za dizajniranje bilo kojeg bota za igru.

Strojnim učenjem mijenja se paradigma i algoritmi postaju sve općenitiji.

Ideja je jednostavna, započinje definiranjem problema s klasifikacijom. Na primjer, želite automatizirati postupak identificiranja vrsta pauka. Vrste koje su vam poznate su razne klase (ne treba ih miješati s taksonomskim klasama), a cilj algoritma je sortiranje nove nepoznate slike u jednu od tih klasa.

Ovdje bi prvi korak za čovjeka bio utvrditi značajke različitih pojedinačnih pauka. Dali bismo podatke o duljini, širini, tjelesnoj masi i boji pojedinih pauka zajedno s vrstama kojima pripadaju:

Duljina Širina Masa Boja Tekstura Vrsta
5 3 12 Smeđa glatko, nesmetano Tata Duge noge
10 8 28 Smeđe-crna dlakav Tarantula

Imati veliku zbirku takvih pojedinačnih podataka o pauku koristit će se za 'treniranje' algoritma, a drugi sličan skup podataka koristit će se za testiranje algoritma kako bi se vidjelo koliko je dobar u odnosu na nove informacije s kojima se nikada prije nije susreo, ali koje već znamo odgovoriti na.

Algoritam će započeti na slučajan način. To će reći, svaki pauk, bez obzira na njegove značajke, bio bi klasificiran kao bilo tko od vrste. Ako u našem skupu podataka postoji 10 različitih vrsta, tada bi ovaj naivni algoritam dobio približno točnu klasifikaciju otprilike 1/10 puta zbog puke sreće.

Ali tada bi aspekt strojnog učenja počeo preuzimati. Počelo bi povezivati ​​određene značajke s određenim ishodom. Na primjer, dlakavi pauci vjerojatno će biti tarantule, a takvi su i veći pauci. Dakle, kad god se pojavi novi pauk koji je velik i dlakav, bit će mu dodijeljena veća vjerojatnost da bude tarantula. Primijetite, još uvijek radimo s vjerojatnostima, jer to u osnovi radimo s vjerojatnosnim algoritmom.

Dio učenja djeluje mijenjajući vjerojatnosti. U početku algoritam započinje slučajnim dodjeljivanjem oznaka "vrsta" pojedincima praveći slučajne korelacije poput "dlakavosti" i "tatine duge noge". Kad napravi takvu korelaciju i čini se da se skup podataka o treningu ne slaže s njom, ta pretpostavka odbacuje se.

Slično tome, kada korelacija dobro djeluje kroz nekoliko primjera, ona svaki put postaje jača. Ova metoda spoticanja prema istini izuzetno je učinkovita, zahvaljujući mnoštvu matematičkih suptilnosti zbog kojih kao početnik ne biste željeli brinuti.

TensorFlow i trenirajte vlastiti klasifikator cvijeća

TensorFlow ideju o strojnom učenju vodi još dalje. U gornjem primjeru bili ste zaduženi za određivanje značajki koje razlikuju jednu vrstu pauka od druge. Morali smo mukotrpno izmjeriti pojedine pauke i stvoriti stotine takvih zapisa.

Ali možemo i bolje, pružajući algoritmu samo neobrađene podatke o slici, možemo mu dopustiti da pronalazi uzorke i razumije razne stvari na slici, poput prepoznavanja oblika na slici, zatim razumijevanja kakva je tekstura različitih površina, boje , i tako dalje. Ovo je početni pojam računalnog vida i možete ga koristiti i za druge vrste ulaza, poput audio signala i treninga vašeg algoritma za prepoznavanje glasa. Sve ovo potpada pod krovni pojam "dubokog učenja", gdje je strojno učenje dovedeno do svoje logične krajnosti.

Ovaj generalizirani skup pojmova tada može biti specijaliziran za rad s mnogim slikama cvijeća i njihovo kategoriziranje.

U donjem primjeru koristit ćemo Python2.7 front-end za sučelje s TensorFlowom i koristit ćemo pip (a ne pip3) za instalaciju TensorFlowa. Podrška za Python 3 još uvijek je malo problematična.

Da biste napravili vlastiti klasifikator slika, prvo ga upotrijebimo pomoću TensorFlowa pip:

$ pip instaliraj tensorflow

Dalje, moramo klonirati tenzor-za-pjesnike-2 git spremište. Ovo je stvarno dobro mjesto za početak iz dva razloga:

  1. Jednostavan je i lagan za upotrebu
  2. Dolazi unaprijed obučeno do određenog stupnja. Na primjer, klasifikator cvijeća već je osposobljen da razumije kakvu teksturu gleda i koje oblike gleda pa je računski manje intenzivan.

Uzmimo spremište:

$ git klon https: // github.com / googlecodelabs / tensorflow-for-poets-2
$ cd tensorflow-za-pjesnike-2

Ovo će biti naš radni direktorij, pa bi se sve naredbe trebale izdavati iz njega, od sada.

Još trebamo uvježbati algoritam za specifični problem prepoznavanja cvijeća, za to su nam potrebni podaci o treningu, pa hajde da dobijemo sljedeće:

$ curl http: // preuzimanje.tenzor tok.org / example_images / flower_photos.tgz
| katran xz -C tf_datoteke

Imenik .. ./tensorflow-za-pjesnike-2 / tf_files sadrži tonu ovih slika pravilno označenih i spremnih za upotrebu. Slike će biti u dvije različite svrhe:

  1. Trening ML programa
  2. Testiranje ML programa

Možete provjeriti sadržaj mape tf_files i ovdje ćete otkriti da se sužavamo na samo 5 kategorija cvijeća, i to tratinčice, tulipani, suncokreti, maslačak i ruže.

Obuka modela

Proces treninga možete započeti tako da prvo postavite sljedeće konstante za promjenu veličine svih ulaznih slika u standardnu ​​veličinu i koristeći laganu arhitekturu mobilne mreže:

$ IMAGE_SIZE = 224
$ ARCHITECTURE = "mobilenet_0.50 _ $ IMAGE_SIZE "

Zatim pozovite python skriptu izvođenjem naredbe:

$ python -m skripte.prekvalificirati se \
--usko grlo = tf_datoteke / uska grla \
--how_many_training_steps = 500 \
--model_dir = tf_files / models / \
--summaries_dir = tf_files / training_summaries / "$ ARCHITECTURE" \
--output_graph = tf_files / retrained_graph.pb \
--output_labels = tf_files / retrained_labels.txt \
--arhitektura = "$ ARCHITECTURE" \
--image_dir = tf_files / flower_photos

Iako je ovdje navedeno puno opcija, većina ih navodi vaše direktorija ulaznih podataka i broj iteracija, kao i izlazne datoteke u koje bi se pohranile informacije o novom modelu. Ovo ne bi trebalo potrajati dulje od 20 minuta za rad na osrednjem prijenosnom računalu.

Nakon što skripta završi i obuku i testiranje, dat će vam procjenu točnosti osposobljenog modela, koja je u našem slučaju bila nešto viša od 90%.

Korištenje treniranog modela

Sada ste spremni koristiti ovaj model za prepoznavanje slika bilo koje nove slike cvijeta. Koristit ćemo ovu sliku:

Lice suncokreta se jedva vidi i ovo je veliki izazov za naš model:

Da biste dobili ovu sliku s Wikimedia commons, upotrijebite wget:

$ wget https: // upload.wikimedia.org / wikipedia / commons / 2/28 / Sunflower_head_2011_G1.jpg
$ mv Sunflower_head_2011_G1.jpg tf_files / nepoznato.jpg

Sprema se kao nepoznata.jpg ispod tf_files poddirektorij.

Sada, za trenutak istine, vidjet ćemo što naš model ima za reći o ovoj slici.Da bismo to učinili, pozivamo se na slika_naznake skripta:

$ python -m skripte.label_image --graph = tf_files / retrained_graph.str --
slika = tf_files / nepoznato.jpg

Dobili biste izlaz sličan ovome:

Brojevi pored vrste cvijeta predstavljaju vjerojatnost da naša nepoznata slika pripada toj kategoriji. Primjerice, to je 98.04% je sigurno da je slika suncokreta i samo je 1.37% šanse da to bude ruža.

Zaključak

Čak i s vrlo osrednjim računalnim resursima, vidimo zapanjujuću preciznost u identificiranju slika. To jasno pokazuje snagu i fleksibilnost TensorFlowa.

Od ovog trenutka možete početi eksperimentirati s raznim drugim vrstama ulaza ili pokušati započeti pisanje vlastite aplikacije koristeći Python i TensorFlow. Ako želite malo bolje upoznati interni rad strojnog učenja, evo interaktivnog načina za to.

Trackpad i pokazivač miša na ekranu AppyMouse za Windows tablete
Korisnicima tableta često nedostaje pokazivač miša, posebno kada su navični koristiti prijenosna računala. Pametni telefoni i tableti osjetljivi na do...
Srednja tipka miša ne radi u sustavu Windows 10
The srednja tipka miša pomaže vam u pomicanju kroz dugačke web stranice i zaslone s puno podataka. Ako se to zaustavi, na kraju ćete koristiti tipkovn...
Kako promijeniti lijevu i desnu tipku miša na računalu sa sustavom Windows 10
Sasvim je normalno da su svi uređaji računalnog miša ergonomski dizajnirani za dešnjake. Ali postoje dostupni uređaji za miš koji su posebno dizajnira...