TensorFlow

Aan de slag met TensorFlow

Aan de slag met TensorFlow
TensorFlow is het geesteskind van Google en in de kern is het een bibliotheek voor numerieke berekeningen. Het is geschreven in C/C++ en heeft een zeer flexibele API. Deze API kan worden gekoppeld aan een Python-front-end, zodat u kleine stukjes Python-code kunt schrijven om gecompliceerde problemen op te lossen. Een flexibele en consistente API stelt ontwikkelaars ook in staat om dezelfde front-endcode te gebruiken om op verschillende platforms te draaien, zoals Nvidia GPU's, universele CPU's en zelfs mobiele en embedded apparaten die elk een heel andere implementatie hebben in de back-end.

TensorFlow heeft enorm veel gebruik gevonden op het gebied van machine learning, juist omdat machine learning veel rekenwerk met zich meebrengt en wordt gebruikt als een algemene probleemoplossende techniek. En hoewel we er interactie mee zullen hebben met Python, heeft het front-ends voor andere talen zoals Go, Node.js en zelfs C#.

Tensorflow is als een zwarte doos die alle wiskundige subtiliteiten erin verbergt en de ontwikkelaar roept gewoon de juiste functies aan om een ​​probleem op te lossen. Maar welk probleem??

Machinaal leren (ML)

Stel dat u een bot ontwerpt om een ​​spelletje schaak te spelen. Vanwege de manier waarop schaken is ontworpen, de manier waarop stukken bewegen en het goed gedefinieerde doel van het spel, is het heel goed mogelijk om een ​​programma te schrijven dat het spel buitengewoon goed zou spelen. In feite zou het de hele mensheid te slim af zijn bij schaken. Het zou precies weten welke zet het moet doen, gezien de staat van alle stukken op het bord.

Een dergelijk programma kan echter alleen schaken. De regels van het spel zijn ingebakken in de logica van de code en het enige dat dat programma doet is die logica rigoureus en nauwkeuriger uitvoeren dan enig mens zou kunnen. Het is geen algoritme voor algemene doeleinden dat u kunt gebruiken om een ​​gamebot te ontwerpen.

Met machine learning verschuift het paradigma en worden de algoritmen steeds algemener.

Het idee is eenvoudig, het begint met het definiëren van een classificatieprobleem. U wilt bijvoorbeeld het proces van het identificeren van de soorten spinnen automatiseren. De soorten die bij u bekend zijn, zijn de verschillende klassen (niet te verwarren met taxonomische klassen) en het doel van het algoritme is om een ​​nieuwe onbekende afbeelding in een van deze klassen te sorteren.

Hier zou de eerste stap voor de mens zijn om de kenmerken van verschillende individuele spinnen te bepalen. We zouden gegevens verstrekken over de lengte, breedte, lichaamsgewicht en kleur van individuele spinnen, samen met de soort waartoe ze behoren:

Lengte Breedte Massa Kleur Textuur Soorten
5 3 12 Bruin glad Papa lange benen
10 8 28 Bruin zwart harig Tarantula

Het hebben van een grote verzameling van dergelijke individuele spider-gegevens zal worden gebruikt om het algoritme te 'trainen' en een andere vergelijkbare dataset zal worden gebruikt om het algoritme te testen om te zien hoe goed het presteert ten opzichte van nieuwe informatie die het nog nooit eerder is tegengekomen, maar waarvan we al weten dat de antwoord op.

Het algoritme begint op een gerandomiseerde manier. Dat wil zeggen, elke spin, ongeacht zijn kenmerken, zou worden geclassificeerd als een van de soorten. Als er 10 verschillende soorten in onze dataset zijn, dan zou dit naïeve algoritme ongeveer 1/10e van de tijd de juiste classificatie krijgen vanwege puur geluk.

Maar dan zou het machine learning-aspect het overnemen. Het zou bepaalde functies gaan associëren met een bepaald resultaat. Harige spinnen zijn bijvoorbeeld waarschijnlijk vogelspinnen, en dat geldt ook voor de grotere spinnen. Dus wanneer er een nieuwe spin verschijnt die groot en harig is, krijgt deze een grotere kans om tarantula te zijn. Let op, we werken nog steeds met waarschijnlijkheden, dit komt omdat we inherent werken met een probabilistisch algoritme.

Het leergedeelte werkt door de kansen te veranderen. In eerste instantie begint het algoritme met het willekeurig toewijzen van 'soort'-labels aan individuen door willekeurige correlaties te maken, zoals 'harig' zijn en 'papa lange benen' zijn. Wanneer het zo'n correlatie maakt en de trainingsdataset er niet mee eens lijkt te zijn, vervalt die veronderstelling.

Evenzo, wanneer een correlatie goed werkt door middel van verschillende voorbeelden, wordt deze elke keer sterker. Deze methode om naar de waarheid te strompelen is opmerkelijk effectief, dankzij veel van de wiskundige subtiliteiten waar je je als beginner geen zorgen over wilt maken.

TensorFlow en je eigen Flower classifier trainen

TensorFlow gaat nog verder dan machine learning. In het bovenstaande voorbeeld was je verantwoordelijk voor het bepalen van de kenmerken die de ene soort spin van de andere onderscheidt. We moesten individuele spinnen nauwgezet meten en honderden van dergelijke records maken.

Maar we kunnen het beter doen, door alleen onbewerkte afbeeldingsgegevens aan het algoritme te leveren, we kunnen het algoritme patronen laten vinden en verschillende dingen over de afbeelding laten begrijpen, zoals het herkennen van de vormen in de afbeelding, dan begrijpen wat de textuur van verschillende oppervlakken is, de kleur , enzovoort, enzovoort. Dit is het beginbegrip van computervisie en je kunt het ook voor andere soorten invoer gebruiken, zoals audiosignalen en het trainen van je algoritme voor spraakherkenning. Dit alles valt onder de overkoepelende term 'Deep Learning', waarbij machine learning tot het logische uiterste wordt doorgevoerd.

Deze gegeneraliseerde reeks begrippen kan dan worden gespecialiseerd bij het omgaan met veel afbeeldingen van bloemen en het categoriseren ervan.

In het onderstaande voorbeeld gebruiken we een Python2.7 front-end om te communiceren met TensorFlow en we zullen pip (niet pip3) gebruiken om TensorFlow te installeren. De ondersteuning voor Python 3 is nog steeds een beetje buggy.

Om uw eigen afbeeldingsclassificator te maken, gebruiken we TensorFlow, laten we deze eerst installeren met Pip:

$pip installeer tensorflow

Vervolgens moeten we de . klonen tensorflow-voor-dichters-2 git-repository. Dit is echt een goede plek om te beginnen om twee redenen:

  1. Het is eenvoudig en gemakkelijk te gebruiken
  2. Het is tot op zekere hoogte voorgetraind. De bloemenclassificator is bijvoorbeeld al getraind om te begrijpen naar welke textuur hij kijkt en naar welke vormen hij kijkt, dus het is rekenkundig minder intensief.

Laten we de repository pakken:

$git kloon https://github.com/googlecodelabs/tensorflow-for-poets-2
$cd tensorflow-voor-dichters-2

Dit wordt onze werkdirectory, dus vanaf nu moeten alle commando's van binnenuit worden gegeven.

We moeten het algoritme nog trainen voor het specifieke probleem van het herkennen van bloemen, daarvoor hebben we trainingsgegevens nodig, dus laten we dat doen:

$krul http://download.tensorstroom.org/example_images/flower_photos.tgz
| tar xz -C tf_files

De map… ./tensorflow-for-poets-2/tf_files bevat een heleboel van deze afbeeldingen, correct gelabeld en klaar om te worden gebruikt. De afbeeldingen zijn voor twee verschillende doeleinden:

  1. Het ML-programma trainen
  2. Het ML-programma testen

U kunt de inhoud van de map controleren tf_files en hier zult u zien dat we ons beperken tot slechts 5 categorieën bloemen, namelijk madeliefjes, tulpen, zonnebloemen, paardenbloem en rozen.

Het model trainen

U kunt het trainingsproces starten door eerst de volgende constanten in te stellen voor het wijzigen van de grootte van alle invoerafbeeldingen in een standaardformaat en door een lichtgewicht mobilenet-architectuur te gebruiken:

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

Roep vervolgens het python-script op door de opdracht uit te voeren:

$python -m scripts.omscholen \
--bottleneck_dir=tf_files/bottlenecks \
--how_many_training_steps=500 \
--model_dir=tf_files/modellen/ \
--summaries_dir=tf_files/training_summaries/"$ARCHITECTURE" \
--output_graph=tf_files/retrained_graph.pb \
--output_labels=tf_files/retrained_labels.tekst \
--architectuur="$ARCHITECTUUR" \
--image_dir=tf_files/flower_photos

Hoewel er hier veel opties zijn gespecificeerd, specificeren de meeste van hen uw invoergegevensmappen en het aantal iteraties, evenals de uitvoerbestanden waar de informatie over het nieuwe model zou worden opgeslagen. Dit zou niet langer dan 20 minuten moeten duren om te draaien op een middelmatige laptop.

Zodra het script zowel de training als het testen heeft voltooid, krijgt u een schatting van de nauwkeurigheid van het getrainde model, dat in ons geval iets hoger was dan 90%.

Het getrainde model gebruiken

U bent nu klaar om dit model te gebruiken voor de beeldherkenning van een nieuwe afbeelding van een bloem. We zullen deze afbeelding gebruiken:

Het gezicht van de zonnebloem is nauwelijks zichtbaar en dit is een mooie uitdaging voor ons model:

Gebruik wget om deze afbeelding van Wikimedia Commons te krijgen:

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

Het wordt opgeslagen als onbekend.jpg onder de tf_files submap.

Nu, voor het moment van de waarheid, zullen we zien wat ons model te zeggen heeft over deze afbeelding.Om dat te doen, roepen we de label_afbeelding script:

$python -m scripts.label_image --graph=tf_files/retrained_graph.pb --
image=tf_files/unknown.jpg

Je zou een uitvoer krijgen die lijkt op deze:

De getallen naast het bloemtype geven de kans weer dat onze onbekende afbeelding tot die categorie behoort. Het is bijvoorbeeld 98.04% zeker dat de afbeelding van een zonnebloem is en het is maar 1.37% kans dat het een roos is.

Conclusie

Zelfs met zeer matige rekenkracht zien we een verbluffende nauwkeurigheid bij het identificeren van afbeeldingen. Dit demonstreert duidelijk de kracht en flexibiliteit van TensorFlow.

Vanaf hier kun je experimenteren met verschillende andere soorten invoer of proberen je eigen andere applicatie te schrijven met Python en TensorFlow. Als je de interne werking van machine learning wat beter wilt leren kennen, is hier een interactieve manier om dat te doen.

Open source-poorten van commerciële game-engines
Gratis, open source en platformonafhankelijke game-engine-recreaties kunnen worden gebruikt om zowel oude als enkele van de vrij recente gametitels te...
Beste opdrachtregelspellen voor Linux
De opdrachtregel is niet alleen je grootste bondgenoot bij het gebruik van Linux, hij kan ook de bron van entertainment zijn omdat je hem kunt gebruik...
Beste gamepad-toewijzingsapps voor Linux
Als je graag games op Linux speelt met een gamepad in plaats van een typisch toetsenbord- en muisinvoersysteem, zijn er enkele handige apps voor jou. ...