Hvad er TensorFlow? Hvordan det virker? Introduktion & Architecture
Lad os starte denne tutorial med TensorFlow-introduktion:
Hvad er TensorFlow?
TensorFlow er en open source end-to-end platform til at skabe Machine Learning-applikationer. Det er et symbolsk matematikbibliotek, der bruger dataflow og differentierbar programmering til at udføre forskellige opgaver fokuseret på træning og inferens af dybe neurale netværk. Det giver udviklere mulighed for at skabe maskinlæringsapplikationer ved hjælp af forskellige værktøjer, biblioteker og fællesskabsressourcer.
I øjeblikket er det mest berømte deep learning-bibliotek i verden Googles TensorFlow. Google-produktet bruger maskinlæring i alle dets produkter til at forbedre søgemaskinen, oversættelsen, billedteksterne eller anbefalingerne.
TensorFlow eksempel
For at give et konkret eksempel kan Google-brugere opleve en hurtigere og mere raffineret søgeoplevelse med AI. Hvis brugeren indtaster et søgeord i søgefeltet, giver Google en anbefaling om, hvad der kunne være det næste ord.

Google ønsker at bruge maskinlæring til at udnytte deres enorme datasæt til at give brugerne den bedste oplevelse. Tre forskellige grupper bruger maskinlæring:
- Forskere
- Datavidenskabsfolk
- Programmører
De kan alle bruge det samme værktøjssæt til at samarbejde med hinanden og forbedre deres effektivitet.
Google har ikke bare nogen data; de har verdens mest massive computer, så Tensor Flow blev bygget til at skalere. TensorFlow er et bibliotek udviklet af Google Brain Team til at accelerere maskinlæring og forskning i dyb neurale netværk.
Det blev bygget til at køre på flere CPU'er eller GPU'er og endda mobile operativsystemer, og det har adskillige wrappers på flere sprog som f.eks. Python, C++ or Java.
Historien om TensorFlow
For et par år siden begyndte deep learning at overgå alle andre maskinlæringsalgoritmer, når de gav en enorm mængde data. Google så, at det kunne bruge disse dybe neurale netværk til at forbedre sine tjenester:
- gmail
- Foto
- Google søgemaskine
De bygger en ramme kaldet Tensorflow at lade forskere og udviklere arbejde sammen om en AI-model. Når den først er udviklet og skaleret, giver den mange mennesker mulighed for at bruge den.
Den blev først offentliggjort i slutningen af 2015, mens den første stabile version dukkede op i 2017. Den er open source under Apache Open Source-licens. Du kan bruge den, ændre den og videredistribuere den modificerede version mod et gebyr uden at betale noget til Google.
Næste i denne TensorFlow Deep learning-tutorial vil vi lære om TensorFlow-arkitektur og hvordan TensorFlow fungerer.
Sådan fungerer TensorFlow
TensorFlow giver dig mulighed for at bygge dataflow-grafer og -strukturer for at definere, hvordan data bevæger sig gennem en graf ved at tage input som en multi-dimensional matrix kaldet Tensor. Det giver dig mulighed for at konstruere et flowchart over operationer, der kan udføres på disse input, som går i den ene ende og kommer i den anden ende som output.
TensorFlow Architecture
Tensorflow-arkitektur fungerer i tre dele:
- Forbehandling af data
- Byg modellen
- Træn og estimer modellen
Det kaldes Tensorflow, fordi det tager input som et multidimensionelt array, også kendt som tensorer. Du kan konstruere en slags rutediagram af operationer (kaldet en graf), som du vil udføre på det input. Inputtet går ind i den ene ende, og så flyder det gennem dette system med flere operationer og kommer ud i den anden ende som output.
Det er derfor, det kaldes TensorFlow, fordi tensoren går ind, det flyder gennem en liste over operationer, og så kommer det ud på den anden side.
Hvor kan Tensorflow køre?
TensorFlow hardware, og softwarekrav kan klassificeres i
Udviklingsfase: Dette er, når du træner tilstanden. Træning foregår normalt på din stationære eller bærbare computer.
Run Phase eller Inference Phase: Når træningen er færdig, kan Tensorflow køres på mange forskellige platforme. Du kan køre den på
- Desktop kører Windows, macOS eller Linux
- Cloud som en webservice
- Mobile enheder som iOS og Android
Du kan træne det på flere maskiner, så kan du køre det på en anden maskine, når du har den trænede model.
Modellen kan trænes og bruges på GPU'er såvel som CPU'er. GPU'er blev oprindeligt designet til videospil. I slutningen af 2010 fandt Stanford-forskere ud af, at GPU også var meget god til matrixoperationer og algebra, så det gør dem meget hurtige til at udføre denne form for beregninger. Dyb læring er afhængig af en masse matrixmultiplikation. TensorFlow er meget hurtig til at beregne matrixmultiplikationen, fordi den er skrevet ind C++. Selvom det er implementeret i C++, TensorFlow kan hovedsagelig tilgås og kontrolleres af andre sprog, Python.
Endelig er en væsentlig egenskab ved TensorFlow TensorBoard. Det TensorBoard gør det muligt at overvåge grafisk og visuelt, hvad TensorFlow laver.
TensorFlow-komponenter
tensor
Tensorflows navn er direkte afledt af dets kerneramme: tensor. I Tensorflow involverer alle beregninger tensorer. En tensor er en vektor or matrix af n-dimensioner, der repræsenterer alle typer data. Alle værdier i en tensor har identisk datatype med en kendt (eller delvist kendt) forme. Formen af data er dimensionaliteten af matrixen eller arrayet.
En tensor kan stamme fra inputdata eller resultatet af en beregning. I TensorFlow udføres alle operationer inde i en graf. Grafen er et sæt af beregninger, der finder sted successivt. Hver operation kaldes en op node og er forbundet med hinanden.
Grafen skitserer operationerne og forbindelserne mellem noderne. Den viser dog ikke værdierne. Kanten af noderne er tensoren, dvs. en måde at udfylde operationen med data.
Grafer
TensorFlow gør brug af en graframme. Grafen samler og beskriver alle serieberegninger udført under træningen. Grafen har mange fordele:
- Det blev gjort for at køre på flere CPU'er eller GPU'er og endda mobile operativsystemer
- Portabiliteten af grafen gør det muligt at bevare beregningerne til øjeblikkelig eller senere brug. Grafen kan gemmes for at blive udført i fremtiden.
- Alle beregningerne i grafen udføres ved at forbinde tensorer sammen
- En tensor har en node og en kant. Noden udfører den matematiske operation og producerer et slutpunktsoutput. Kanterne kanterne forklarer input/output forholdet mellem noder.
Hvorfor er TensorFlow populær?
TensorFlow er det bedste bibliotek af alle, fordi det er bygget til at være tilgængeligt for alle. Tensorflow-biblioteket inkorporerer forskellige API til bygget i skala deep learning-arkitektur som CNN eller RNN. TensorFlow er baseret på grafberegning; det giver udvikleren mulighed for at visualisere konstruktionen af det neurale netværk med Tensorboad. Dette værktøj er nyttigt til at fejlsøge programmet. Endelig er Tensorflow bygget til at blive implementeret i stor skala. Den kører på CPU og GPU.
Tensorflow tiltrækker den største popularitet på GitHub sammenlignet med den anden deep learning-ramme.
TensorFlow Algorithms
Nedenfor er de algoritmer, der understøttes af TensorFlow:
I øjeblikket har TensorFlow 1.10 en indbygget API til:
- Lineær regression: tf.estimator.LinearRegressor
- Klassifikation:tf.estimator.LinearClassifier
- Deep learning klassifikation: tf.estimator.DNNClassifier
- Deep learning wipe og dyb: tf.estimator.DNNLinearCombinedClassifier
- Booster tree regression: tf.estimator.BoostedTreesRegressor
- Boosted træklassificering: tf.estimator.BoostedTreesClassifier
Sådan fungerer beregninger i TensorFlow
import numpy as np import tensorflow as tf
I de to første kodelinjer har vi importeret tensorflow som tf. Med Python, er det almindelig praksis at bruge et kort navn til et bibliotek. Fordelen er at undgå at skrive det fulde navn på biblioteket, når vi skal bruge det. For eksempel kan vi importere tensorflow som tf og kalde tf når vi vil bruge en tensorflow-funktion
Lad os øve den elementære arbejdsgang i Tensorflow med simple TensorFlow-eksempler. Lad os lave en beregningsgraf, der multiplicerer to tal sammen.
I løbet af eksemplet vil vi gange X_1 og X_2 sammen. Tensorflow vil oprette en node til at forbinde operationen. I vores eksempel kaldes det multiplicere. Når grafen er bestemt, vil Tensorflow-beregningsmotorer multiplicere X_1 og X_2 sammen.
Til sidst kører vi en TensorFlow-session, der kører beregningsgrafen med værdierne X_1 og X_2 og udskriver resultatet af multiplikationen.
Lad os definere X_1 og X_2 input noderne. Når vi opretter en node i Tensorflow, skal vi vælge, hvilken slags node der skal oprettes. X1 og X2 noderne vil være en pladsholder node. Pladsholderen tildeler en ny værdi, hver gang vi laver en beregning. Vi vil oprette dem som en TF-dot pladsholder node.
Trin 1: Definer variablen
X_1 = tf.placeholder(tf.float32, name = "X_1") X_2 = tf.placeholder(tf.float32, name = "X_2")
Når vi opretter en pladsholder node, er vi nødt til at indsætte datatypen vil tilføje tal her, så vi kan bruge en flydende-komma-datatype, lad os bruge tf.float32. Vi skal også give denne node et navn. Dette navn vil dukke op, når vi ser på de grafiske visualiseringer af vores model. Lad os navngive denne node X_1 ved at indsætte en parameter kaldet navn med værdien X_1, og lad os nu definere X_2 på samme måde. X_2.
Trin 2: Definer beregningen
multiply = tf.multiply(X_1, X_2, name = "multiply")
Nu kan vi definere den node, der udfører multiplikationsoperationen. I Tensorflow kan vi gøre det ved at oprette en tf.multiply node.
Vi vil videregive X_1 og X_2 noderne til multiplikationsnoden. Det fortæller tensorflow at forbinde disse noder i beregningsgrafen, så vi beder den om at trække værdierne fra x og y og gange resultatet. Lad os også give multiplikationsnoden navnet multipliceret. Det er hele definitionen for vores simple beregningsgraf.
Trin 3: Udfør handlingen
For at udføre operationer i grafen skal vi oprette en session. I Tensorflow udføres det af tf.Session(). Nu hvor vi har en session, kan vi bede sessionen om at køre operationer på vores beregningsgraf ved at kalde session. For at køre beregningen skal vi bruge run.
Når additionsoperationen kører, vil den se, at den skal have fat i værdierne for X_1 og X_2 noderne, så vi skal også indlæse værdier for X_1 og X_2. Det kan vi gøre ved at angive en parameter kaldet feed_dict. Vi sender værdien 1,2,3 for X_1 og 4,5,6 for X_2.
Vi udskriver resultaterne med print(result). Vi skulle se 4, 10 og 18 for 1×4, 2×5 og 3×6
X_1 = tf.placeholder(tf.float32, name = "X_1") X_2 = tf.placeholder(tf.float32, name = "X_2") multiply = tf.multiply(X_1, X_2, name = "multiply") with tf.Session() as session: result = session.run(multiply, feed_dict={X_1:[1,2,3], X_2:[4,5,6]}) print(result)
[ 4. 10. 18.]
Muligheder for at indlæse data i TensorFlow
Det første skridt før træning a maskinlæringsalgoritme er at indlæse data. Der er to almindelige måder at indlæse data på:
1. Indlæs data i hukommelsen: Det er den enkleste metode. Du indlæser alle dine data i hukommelsen som et enkelt array. Du kan skrive en Python kode. Disse kodelinjer er ikke relateret til Tensorflow.
2. Tensorflow datapipeline: Tensorflow har indbygget API, der hjælper dig med at indlæse dataene, udføre operationen og fodre maskinlæringsalgoritmen nemt. Denne metode fungerer meget godt, især når du har et stort datasæt. For eksempel er billedregistreringer kendt for at være enorme og passer ikke ind i hukommelsen. Datapipelinen styrer hukommelsen af sig selv
Hvilken løsning skal man bruge?
Indlæs data i hukommelsen
Hvis dit datasæt ikke er for stort, dvs. mindre end 10 gigabyte, kan du bruge den første metode. Dataene kan passe ind i hukommelsen. Du kan bruge et berømt bibliotek kaldet Pandas til at importere CSV-filer. Du vil lære mere om pandaer i den næste tutorial.
Indlæs data med Tensorflow-pipeline
Den anden metode fungerer bedst, hvis du har et stort datasæt. For eksempel, hvis du har et datasæt på 50 gigabyte, og din computer kun har 16 gigabyte hukommelse, vil maskinen gå ned.
I denne situation skal du bygge en Tensorflow-rørledning. Pipelinen vil indlæse dataene i batch eller små bidder. Hver batch vil blive skubbet til pipeline og være klar til træningen. At bygge en pipeline er en fremragende løsning, fordi den giver dig mulighed for at bruge parallel computing. Det betyder, at Tensorflow træner modellen på tværs af flere CPU'er. Det fremmer beregningen og giver mulighed for træning af kraftfulde neurale netværk.
Du vil se i de næste tutorials om, hvordan du bygger en betydelig pipeline til at fodre dit neurale netværk.
I en nøddeskal, hvis du har et lille datasæt, kan du indlæse dataene i hukommelsen med Pandas bibliotek.
Hvis du har et stort datasæt, og du ønsker at gøre brug af flere CPU'er, vil du være mere komfortabel med at arbejde med Tensorflow-pipeline.
Sådan opretter du TensorFlow Pipeline
Her er trinene til at oprette en TensorFlow-pipeline:
I eksemplet før tilføjede vi manuelt tre værdier for X_1 og X_2. Nu vil vi se, hvordan man indlæser data til Tensorflow:
Trin 1) Opret dataene
Først og fremmest, lad os bruge numpy-biblioteket til at generere to tilfældige værdier.
import numpy as np x_input = np.random.sample((1,2)) print(x_input)
[[0.8835775 0.23766977]]
Trin 2) Opret pladsholderen
Ligesom i det foregående eksempel opretter vi en pladsholder med navnet X. Vi skal specificere formen på tensoren eksplicit. I tilfælde af at vi indlæser et array med kun to værdier. Vi kan skrive formen som form=[1,2]
# using a placeholder x = tf.placeholder(tf.float32, shape=[1,2], name = 'X')
Trin 3) Definer datasætmetoden
Dernæst skal vi definere datasættet, hvor vi kan udfylde værdien af pladsholderen x. Vi skal bruge metoden tf.data.Dataset.from_tensor_slices
dataset = tf.data.Dataset.from_tensor_slices(x)
Trin 4) Opret pipeline
I trin fire skal vi initialisere den pipeline, hvor dataene vil flyde. Vi skal oprette en iterator med make_initializable_iterator. Vi kalder det iterator. Så er vi nødt til at kalde denne iterator for at feed den næste batch af data, get_next. Vi navngiver dette trin get_next. Bemærk, at i vores eksempel er der kun én batch af data med kun to værdier.
iterator = dataset.make_initializable_iterator() get_next = iterator.get_next()
Trin 5) Udfør handlingen
Det sidste trin ligner det forrige eksempel. Vi starter en session, og vi kører operation iteratoren. Vi fodrer feed_dict med værdien genereret af bedøvet. Disse to værdier vil udfylde pladsholderen x. Så kører vi get_next for at udskrive resultatet.
with tf.Session() as sess: # feed the placeholder with data sess.run(iterator.initializer, feed_dict={ x: x_input }) print(sess.run(get_next)) # output [ 0.52374458 0.71968478]
[0.8835775 0.23766978]
Resumé
- TensorFlow betyder: TensorFlow er det mest berømte deep learning-bibliotek de seneste år. En praktiserende læge, der bruger TensorFlow, kan bygge enhver dyb læringsstruktur, såsom CNN, RNN eller simple kunstige neurale netværk.
- TensorFlow bruges mest af akademikere, startups og store virksomheder. Google bruger TensorFlow i næsten alle Googles daglige produkter inklusive Gmail, Foto og Google Search Engine.
- Google Brain-teamets udviklede TensorFlow for at udfylde hullet mellem forskere og produktudviklere. I 2015 offentliggjorde de TensorFlow; det vokser hurtigt i popularitet. I dag er TensorFlow det dybe læringsbibliotek med flest repositories på GitHub.
- Praktiserende læger bruger Tensorflow, fordi det er nemt at implementere i skala. Den er bygget til at fungere i skyen eller på mobile enheder som iOS og Android.
Tensorflow fungerer i en session. Hver session er defineret af en graf med forskellige beregninger. Et simpelt eksempel kan være at gange til tal. I Tensorflow kræves tre trin:
- Definer variablen
X_1 = tf.placeholder(tf.float32, name = "X_1") X_2 = tf.placeholder(tf.float32, name = "X_2")
- Definer beregningen
multiply = tf.multiply(X_1, X_2, name = "multiply")
- Udfør operationen
with tf.Session() as session: result = session.run(multiply, feed_dict={X_1:[1,2,3], X_2:[4,5,6]}) print(result)
En almindelig praksis i Tensorflow er at oprette en pipeline til at indlæse dataene. Hvis du følger disse fem trin, vil du være i stand til at indlæse data til TensorFLow:
- Opret dataene
import numpy as np x_input = np.random.sample((1,2)) print(x_input)
- Opret pladsholderen
x = tf.placeholder(tf.float32, shape=[1,2], name = 'X')
- Definer datasætmetoden
dataset = tf.data.Dataset.from_tensor_slices(x)
- Opret pipeline
iterator = dataset.make_initializable_iterator() get_next = iterator.get_next()
- Udfør programmet
with tf.Session() as sess: sess.run(iterator.initializer, feed_dict={ x: x_input }) print(sess.run(get_next))