Komme i gang med TensorFlow

Komme i gang med TensorFlow
Tensorflow er Googles hjernebarn, og i kjernen er det et bibliotek for numerisk beregning. Det er skrevet i C/C ++ og har et veldig fleksibelt API. Denne API kan kobles sammen med en python front-end, slik at du kan skrive små utdrag av Python-kode for å løse kompliserte problemer. En fleksibel og konsistent API gjør det også.

Tensorflow har funnet enorm bruk innen maskinlæring, nettopp fordi maskinlæring involverer mye tallknusing og brukes som en generalisert problemløsningsteknikk. Og selv om vi vil samhandle med det ved hjelp av Python, har det front-ender for andre språk som Go, Node.JS og til og med C#.

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

Maskinlæring (ML)

Anta at du designer en bot for å spille et sjakkspill. På grunn av måten sjakk er designet, måten brikker beveger seg 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 menneskeslekten i sjakk. Det ville vite nøyaktig hvilket trekk det trenger å gjøre gitt tilstanden til alle stykker på tavlen.

Imidlertid kan et slikt program bare spille sjakk. Spillets regler blir bakt inn i logikken i koden, og alt dette programmet gjør er å utføre den logikken strengt og mer nøyaktig enn noe menneske kan. Det er ikke en generell formål algoritme som du kan bruke til å designe noen spillbot.

Med maskinlæring blir paradigmeskiftene og algoritmene mer og mer generell formål.

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

Her ville det første trinnet for mennesket være å bestemme funksjonene til forskjellige individuelle edderkopper. Vi vil levere data om lengde, bredde, kroppsmasse og farge på 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 den 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 uavhengig av funksjonene vil bli klassifisert som noen av arten. Hvis det er 10 forskjellige arter i datasettet vårt, vil denne naive algoritmen bli gitt riktig klassifisering omtrent 1/10 av tiden på grunn av ren-luck.

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

Læringsdelen fungerer ved å endre sannsynlighetene. Opprinnelig starter algoritmen med å tilfeldig tilordne en 'arts' etiketter til enkeltpersoner ved å lage tilfeldige korrelasjoner som, å være 'hårete' og være 'pappa lange ben'. Når det gjør en slik korrelasjon og treningsdatasettet ser ikke ut til å være enig i det, blir den antagelsen droppet.

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

Tensorflow og trene din egen blomsterklassifiserer

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

Men vi kan gjøre det bedre, ved bare , også videre. Dette er begynnelsesoppfatningen om datamaskinvisjon, og du kan bruke den til andre typer innganger også, som lydsignaler og trening av algoritmen din til stemmegjenkjenning. Alt dette kommer inn under paraplybegrepet 'dyp læring' der maskinlæring blir tatt til sin logiske ekstrem.

Dette generaliserte settet med forestillinger kan deretter spesialiseres når du arbeider med mange bilder av blomster og kategoriserer dem.

I eksemplet nedenfor bruker vi en python2.7 Front-end til grensesnitt med TensorFlow, og vi bruker PIP (ikke PIP3) for å installere TensorFlow. Python 3 -støtten er fremdeles litt buggy.

For å lage din egen bildeklassifiserer, ved hjelp av TensorFlow First La oss installere det ved hjelp av Pip:

$ pip installer tensorflow

Deretter må vi klone Tensorflow-for-Poets-2 Git Repository. Dette er et veldig bra sted å starte av to grunner:

  1. Det er enkelt og enkelt å bruke
  2. Det kommer forhåndsutdannet til en viss grad. For eksempel er blomsterklassifiseringen allerede opplært til å forstå hvilken tekstur den ser på og hvilke former den ser på, så den er beregningsmessig mindre intensiv.

La oss få depotet:

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

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

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

$ krøll http: // nedlasting.Tensorflow.org/eksempel_images/power_photos.tgz
| TAR XZ -C TF_FILES

Katalogen .. ./Tensorflow-for-Poets-2/tf_files inneholder massevis av disse bildene som er riktig merket og klare til å brukes. Bildene vil være for 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 innsnevrer til bare 5 kategorier av blomster, nemlig tusenfryd, tulipaner, solsikker, løvetann og roser.

Trene modellen

Du kan starte treningsprosessen ved først å sette opp følgende konstanter for å endre størrelse på alle inngangsbilder i en standardstørrelse, og bruke en lett-vekt Mobilenet-arkitektur:

$ Image_Size = 224
$ Arkitektur = "Mobilenet_0.50 _ $ Image_Size "

Påkaller deretter Python -skriptet ved å kjøre kommandoen:

$ python -m skript.omskolering \
--Bottleneck_dir = tf_files/flaskehalser \
--how_many_training_steps = 500 \
--modell_dir = tf_files/ modeller/ \
--Sammendrag_dir = tf_files/trening_summaries/"$ arkitektur" \
--output_graph = tf_files/omskolert_graph.pb \
--output_labels = tf_files/omskolerte_label.tekst \
--arkitektur = "$ arkitektur" \
--image_dir = tf_files/power_photos

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

Når skriptet 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 til bildegjenkjenning av et nytt bilde av en blomst. Vi bruker dette bildet:

Solsikkeens 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/8/sunflower_head_2011_g1.jpg
$ mv sunflower_head_2011_g1.jpg tf_files/ukjent.jpg

Det er frelst 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 etikett_image manus:

$ python -m skript.label_image -graph = tf_files/colutskolert_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% sikker på at bildet er av en solsikke og det er bare 1.37% sjanse for at det er en rose.

Konklusjon

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

Herfra og videre 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 det interne arbeidet med maskinlæring litt bedre her er en interaktiv måte for deg å gjøre det.