TensorFlow

Komme i gang med TensorFlow

Komme i gang med TensorFlow
TensorFlow er Googles hjernebarn, og kjernen er det et bibliotek for numerisk beregning. Den er skrevet i C / C ++ og har en veldig fleksibel API. Denne API-en kan grensesnittes med en Python-frontend, slik at du kan skrive små utdrag av Python-kode for å løse kompliserte problemer. En fleksibel og konsistent API tillater også utviklere å bruke den samme front-end-koden til å kjøre på forskjellige plattformer som Nvidia GPUer, generelle CPUer og til og med mobile og innebygde enheter som hver har en veldig annen implementering i back-enden.

TensorFlow har funnet enorm bruk innen maskinlæring, nettopp fordi maskinlæring involverer mye antall knusing og brukes som en generalisert problemløsningsteknikk. Og selv om vi vil samhandle med den ved hjelp av Python, har den frontendene for andre språk som Go, Node.js og til og med C #.

Tensorflow er som en svart boks som skjuler alle matematiske finesser i den, og utvikleren bare kaller de riktige funksjonene for å løse et problem. Men hvilket problem?

Maskinlæring (ML)

Anta at du designer en bot for å spille et parti sjakk. På grunn av måten sjakk er designet, måten brikkene beveger seg på og det veldefinerte målet med spillet, er det fullt mulig å skrive et program som vil spille spillet ekstremt bra. Faktisk ville det overliste hele menneskeheten i sjakk. Det ville vite nøyaktig hvilket trekk det trenger å gjøre gitt tilstanden til alle brikkene på brettet.

Et slikt program kan imidlertid bare spille sjakk. Spillets regler er bakt inn i logikken til koden, og alt det programmet gjør er å utføre den logikken grundig og mer nøyaktig enn noe menneske kunne. Det er ikke en generell algoritme som du kan bruke til å designe en hvilken som helst spillbot.

Med maskinlæring skifter paradigmet og algoritmene blir mer og mer generelle formål.

Ideen er enkel, den starter med å definere et klassifiseringsproblem. For eksempel vil du automatisere prosessen med å identifisere arten av edderkopper. Artene som er kjent for deg er de forskjellige klassene (ikke forveksles med taksonomiske klasser) og målet med algoritmen er å sortere et nytt ukjent bilde i en av disse klassene.

Her vil det første trinnet for mennesket være å bestemme funksjonene til forskjellige individuelle edderkopper. Vi leverer data om lengden, bredden, kroppsmassen og fargen til individuelle edderkopper sammen med arten de tilhører:

Lengde Bredde Masse Farge Tekstur Arter
5 3 12 brun glatt Pappa lange bein
10 8 28 Brun svart hårete Tarantell

Å ha en stor samling av slike individuelle edderkoppdata vil bli brukt til å 'trene' algoritmen, og et annet lignende datasett vil bli brukt til å teste algoritmen for å se hvor godt det gjør mot ny informasjon det aldri har møtt før, men som vi allerede vet svar til.

Algoritmen starter på en randomisert måte. Det vil si at hver edderkopp uansett dens egenskaper vil bli klassifisert som noen av arten. Hvis det er 10 forskjellige arter i datasettet vårt, vil denne naive algoritmen bli gitt den riktige klassifiseringen omtrent 1/10 av tiden på grunn av ren lykke.

Men så begynte maskinlæringsaspektet å ta over. Det ville begynne å knytte visse funksjoner til et visst resultat. For eksempel vil hårete edderkopper sannsynligvis være tarantulaer, og det samme er de større edderkoppene. Så når en ny edderkopp som er stor og hårete dukker opp, vil den få større sannsynlighet for å være tarantula. Legg merke til at vi fortsatt jobber med sannsynligheter, dette er fordi vi iboende jobber med en sannsynlig algoritme.

Læringsdelen fungerer ved å endre sannsynlighetene. Opprinnelig starter algoritmen med å tilfeldig tilføre en 'art' -etikett til individer ved å lage tilfeldige sammenhenger som å være 'hårete' og være 'pappa lange ben'. Når det gir en slik sammenheng og opplæringsdatasettet ikke ser ut til å være enig med det, faller denne antagelsen bort.

Tilsvarende, når en korrelasjon fungerer bra gjennom flere eksempler, blir den sterkere hver gang. Denne metoden for å snuble mot sannheten er bemerkelsesverdig effektiv, takket være mange matematiske finesser som du som nybegynner ikke vil bekymre deg for.

TensorFlow og trene din egen Flower classifier

TensorFlow tar ideen om maskinlæring enda lenger. I eksemplet ovenfor hadde du ansvaret for å bestemme funksjonene som skiller en edderkoppart fra en annen. Vi måtte måle individuelle edderkopper omhyggelig og lage hundrevis av slike poster.

Men vi kan gjøre det bedre, ved å gi bare rå bildedata til algoritmen, kan vi la algoritmen finne mønstre og forstå forskjellige ting om bildet som å gjenkjenne figurene i bildet, og deretter forstå hva teksturen på forskjellige overflater er, fargen , også videre. Dette er begynnelsesbegrepet for datasyn, og du kan bruke det til andre slags innganger, for eksempel lydsignaler og trene algoritmen din for talegjenkjenning. Alt dette kommer under paraplybegrepet "Deep Learning" hvor maskinlæring blir tatt til sitt logiske ekstreme.

Dette generaliserte settet med forestillinger kan da spesialiseres når du arbeider med mange blomsterbilder og kategoriserer dem.

I eksemplet nedenfor bruker vi en Python2.7 front-end for grensesnitt med TensorFlow, og vi bruker pip (ikke pip3) for å installere TensorFlow. Python 3-støtten er fortsatt litt buggy.

For å lage din egen bildeklassifisering, bruk TensorFlow først, la oss installere den ved hjelp av pip:

$ pip installere tensorflow

Deretter må vi klone tensorflow-for-poeter-2 git repository. Dette er et veldig bra sted å starte av to grunner:

  1. Den er enkel og enkel å bruke
  2. Det kommer pre-trent til en viss grad. For eksempel er blomsterklassifisereren allerede opplært til å forstå hvilken tekstur den ser på og hvilke former den ser på, slik at den er beregningsmessig mindre intensiv.

La oss få depotet:

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

Dette kommer til å være vår arbeidskatalog, så alle kommandoene bør utstedes fra den, fra nå av.

Vi trenger fortsatt å trene algoritmen for det spesifikke problemet med å gjenkjenne blomster, for det trenger vi treningsdata, så la oss få det:

$ curl http: // nedlasting.tensorflow.org / example_images / flower_photos.tgz
| tjære xz -C tf_files

Katalogen .. ./tensorflow-for-poeter-2 / tf_files inneholder massevis av disse bildene som er riktig merket og klare til bruk. Bildene vil være til to forskjellige formål:

  1. Trening av ML-programmet
  2. Testing av ML-programmet

Du kan sjekke innholdet i mappen tf_files og her vil du oppdage at vi begrenser bare 5 kategorier blomster, nemlig tusenfryd, tulipaner, solsikker, løvetann og roser.

Trening av modellen

Du kan starte opplæringsprosessen ved først å sette opp følgende konstanter for å endre størrelsen på alle inngangsbilder til en standardstørrelse, og ved å bruke en lett mobilenettarkitektur:

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

Påkall deretter python-skriptet ved å kjøre kommandoen:

$ python -m-skript.omskolere \
--flaskehals_dir = tf_filer / flaskehalser \
--how_many_training_steps = 500 \
--modell_dir = tf_filer / modeller / \
--summaries_dir = tf_files / training_summaries / "$ ARCHITECTURE" \
--output_graph = tf_files / retrained_graph.pb \
--output_labels = tf_files / retrained_labels.tekst \
--arkitektur = "$ ARCHITECTURE" \
--image_dir = tf_files / flower_photos

Selv om det er mange alternativer som er spesifisert her, spesifiserer de fleste inngangsdatakatalogene og antall iterasjon, samt utdatafilene der informasjonen om den nye modellen vil bli lagret. Dette bør ikke ta lenger enn 20 minutter å kjøre på en middelmådig bærbar PC.

Når manus er ferdig med både trening og testing, vil det gi deg et nøyaktighetsestimat av den trente modellen, som i vårt tilfelle var litt høyere enn 90%.

Bruke den trente modellen

Du er nå klar til å bruke denne modellen for bildegjenkjenning av ethvert nytt bilde av en blomst. Vi bruker dette bildet:

Solsikkens ansikt er knapt synlig, og dette er en stor utfordring for modellen vår:

For å få dette bildet fra Wikimedia commons, bruk wget:

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

Det er lagret som ukjent.jpg under tf_files underkatalog.

Nå, for sannhetens øyeblikk, skal vi se hva modellen vår har å si om dette bildet.For å gjøre det påkaller vi label_image manus:

$ python -m-skript.label_image --graph = tf_files / retrained_graph.pb --
image = tf_files / ukjent.jpg

Du vil få en utgang som ligner på dette:

Tallene ved siden av blomstertypen representerer sannsynligheten for at vårt ukjente bilde tilhører den kategorien. For eksempel er det 98.04% er sikre på at bildet er av en solsikke, og det er bare 1.37% sjanse for at det blir en rose.

Konklusjon

Selv med svært middelmådige beregningsressurser, ser vi en svimlende nøyaktighet ved å identifisere bilder. Dette demonstrerer tydelig kraften og fleksibiliteten til TensorFlow.

Herfra kan du begynne å eksperimentere med forskjellige andre typer innganger eller prøve å begynne å skrive din egen forskjellige applikasjon ved hjelp av Python og TensorFlow. Hvis du vil vite hvordan maskinlæring fungerer internt, er det en interaktiv måte å gjøre det på.

5 beste arkadespill for Linux
I dag er datamaskiner seriøse maskiner som brukes til spill. Hvis du ikke kan få den nye høye poengsummen, vil du vite hva jeg mener. I dette innlegge...
Kamp for Wesnoth 1.1. 3.6 Utvikling utgitt
Kamp for Wesnoth 1.1. 3.6 utgitt i forrige måned, er den sjette utgivelsen i 1.1. 3.x-serien, og den leverer en rekke forbedringer, spesielt til bruke...
Slik installerer du League Of Legends på Ubuntu 14.04
Hvis du er fan av League of Legends, er dette en mulighet for deg å prøvekjør League of Legends. Merk at LOL støttes på PlayOnLinux hvis du er en linu...