Vad är TensorFlow? Hur det fungerar? Introduktion & Architecture

Låt oss börja den här handledningen med TensorFlow-introduktion:

Vad är TensorFlow?

TensorFlow är en end-to-end-plattform med öppen källkod för att skapa Machine Learning-applikationer. Det är ett symboliskt matematikbibliotek som använder dataflöde och differentierbar programmering för att utföra olika uppgifter fokuserade på träning och slutledning av djupa neurala nätverk. Det låter utvecklare skapa maskininlärningsapplikationer med hjälp av olika verktyg, bibliotek och communityresurser.

För närvarande är det mest kända djupinlärningsbiblioteket i världen Googles TensorFlow. Google-produkten använder maskininlärning i alla sina produkter för att förbättra sökmotorn, översättningen, bildtextningen eller rekommendationerna.

TensorFlow Exempel

För att ge ett konkret exempel kan Google-användare uppleva en snabbare och mer förfinad sökupplevelse med AI. Om användaren skriver ett sökord i sökfältet ger Google en rekommendation om vad som kan bli nästa ord.

TensorFlow Exempel
TensorFlow Exempel

Google vill använda maskininlärning för att dra fördel av deras enorma datamängder för att ge användarna den bästa upplevelsen. Tre olika grupper använder maskininlärning:

  • Forskare
  • Dataforskare
  • programmerare

De kan alla använda samma verktygsuppsättning för att samarbeta med varandra och förbättra sin effektivitet.

Google har inte bara någon data; de har världens mest massiva dator, så Tensor Flow byggdes för att skala. TensorFlow är ett bibliotek utvecklat av Google Brain Team för att påskynda maskininlärning och forskning om djupa neurala nätverk.

Den byggdes för att köras på flera processorer eller GPU:er och till och med mobila operativsystem, och den har flera omslag på flera språk som Python, C++ or Java.

TensorFlows historia

För ett par år sedan började djupinlärning att överträffa alla andra maskininlärningsalgoritmer när de gav en enorm mängd data. Google såg att det kunde använda dessa djupa neurala nätverk för att förbättra sina tjänster:

  • gmail
  • Bild
  • Googles sökmotor

De bygger ett ramverk som heter Tensorflöde att låta forskare och utvecklare arbeta tillsammans på en AI-modell. När den väl har utvecklats och skalats låter den många människor använda den.

Den offentliggjordes först i slutet av 2015, medan den första stabila versionen dök upp 2017. Den är öppen källkod under Apache Open Source-licens. Du kan använda den, ändra den och omdistribuera den modifierade versionen mot en avgift utan att betala något till Google.

Härnäst i denna TensorFlow Deep learning-handledning kommer vi att lära oss om TensorFlow-arkitektur och hur TensorFlow fungerar.

Hur TensorFlow fungerar

TensorFlow låter dig bygga dataflödesgrafer och strukturer för att definiera hur data rör sig genom en graf genom att ta indata som en flerdimensionell array som kallas Tensor. Det låter dig konstruera ett flödesschema över operationer som kan utföras på dessa ingångar, som går i ena änden och kommer i andra änden som utdata.

TensorFlow Architecture

Tensorflow-arkitekturen fungerar i tre delar:

  • Förbearbetning av data
  • Bygg modellen
  • Träna och uppskatta modellen

Det kallas Tensorflow eftersom det tar indata som en flerdimensionell array, även känd som tensorer. Du kan konstruera en sorts flödesschema av operationer (kallas en graf) som du vill utföra på den ingången. Ingången går in i ena änden, och sedan flödar den genom detta system med flera operationer och kommer ut i den andra änden som utgång.

Det är därför det kallas TensorFlow eftersom tensorn går in det flyter genom en lista med operationer, och sedan kommer det ut på andra sidan.

Var kan Tensorflow köras?

TensorFlow hårdvara och programkrav kan klassificeras i

Utvecklingsfas: Det här är när du tränar läget. Utbildning sker vanligtvis på din stationära eller bärbara dator.

Körfas eller slutledningsfas: När träningen är klar kan Tensorflow köras på många olika plattformar. Du kan köra den på

  • Desktop körs Windows, macOS eller Linux
  • Moln som webbtjänst
  • Mobila enheter som iOS och Android

Du kan träna den på flera maskiner och sedan kan du köra den på en annan maskin, när du väl har den utbildade modellen.

Modellen kan tränas och användas på såväl GPU:er som processorer. GPU:er designades ursprungligen för videospel. I slutet av 2010 fann Stanford-forskare att GPU också var mycket bra på matrisoperationer och algebra så att det gör dem väldigt snabba för att göra den här typen av beräkningar. Djup inlärning bygger på mycket matrismultiplikation. TensorFlow är väldigt snabb på att beräkna matrismultiplikationen eftersom den är inskriven C++. Även om det är implementerat i C++, TensorFlow kan nås och kontrolleras av andra språk främst, Python.

Slutligen, en viktig egenskap hos TensorFlow är TensorBoard. De TensorBoard gör det möjligt att grafiskt och visuellt övervaka vad TensorFlow gör.

TensorFlow-komponenter

tensor

Tensorflows namn är direkt härlett från dess kärna ramverk: tensor. I Tensorflow involverar alla beräkningar tensorer. En tensor är en vektor or matris av n-dimensioner som representerar alla typer av data. Alla värden i en tensor innehåller identisk datatyp med en känd (eller delvis känd) forma. Formen på data är dimensionaliteten hos matrisen eller matrisen.

En tensor kan härröra från indata eller resultatet av en beräkning. I TensorFlow bedrivs all verksamhet inuti en diagram. Grafen är en uppsättning beräkningar som sker successivt. Varje operation kallas an op-nod och är kopplade till varandra.

Grafen visar operationerna och kopplingarna mellan noderna. Den visar dock inte värdena. Kanten på noderna är tensorn, dvs ett sätt att fylla operationen med data.

Grafer

TensorFlow använder sig av ett graframverk. Grafen samlar och beskriver alla serieberäkningar som gjorts under träningen. Grafen har många fördelar:

  • Det gjordes för att köras på flera processorer eller GPU:er och till och med mobilt operativsystem
  • Portabiliteten av grafen gör det möjligt att bevara beräkningarna för omedelbar eller senare användning. Grafen kan sparas för att exekveras i framtiden.
  • Alla beräkningar i grafen görs genom att koppla samman tensorer
    • En tensor har en nod och en kant. Noden bär den matematiska operationen och producerar en slutpunktsutgång. Kanterna kanterna förklarar input/output-relationerna mellan noder.

Varför är TensorFlow populär?

TensorFlow är det bästa biblioteket av alla eftersom det är byggt för att vara tillgängligt för alla. Tensorflow-biblioteket innehåller olika API för att bygga i skala djupinlärningsarkitektur som CNN eller RNN. TensorFlow är baserat på grafberäkning; det tillåter utvecklaren att visualisera konstruktionen av det neurala nätverket med Tensorboad. Det här verktyget är användbart för att felsöka programmet. Slutligen är Tensorflow byggt för att kunna distribueras i stor skala. Den körs på CPU och GPU.

Tensorflow lockar den största populariteten på GitHub jämfört med det andra ramverket för djupinlärning.

TensorFlow Algorithms

Nedan är algoritmerna som stöds av TensorFlow:

För närvarande har TensorFlow 1.10 ett inbyggt API för:

  • Linjär regression: tf.estimator.LinearRegressor
  • Klassificering:tf.estimator.LinearClassifier
  • Klassificering av djupinlärning: tf.estimator.DNNClassifier
  • Deep learning wipe och djup: tf.estimator.DNNLinearCombinedClassifier
  • Booster tree regression: tf.estimator.BoostedTreesRegressor
  • Förstärkt trädklassificering: tf.estimator.BoostedTreesClassifier

Hur beräkningar fungerar i TensorFlow

import numpy as np
import tensorflow as tf

I de två första kodraderna har vi importerat tensorflow som tf. Med Python, är det vanligt att använda ett kort namn för ett bibliotek. Fördelen är att undvika att skriva in bibliotekets fullständiga namn när vi behöver använda det. Till exempel kan vi importera tensorflow som tf, och anropa tf när vi vill använda en tensorflow-funktion

Låt oss öva på det elementära arbetsflödet i Tensorflow med enkla TensorFlow-exempel. Låt oss skapa en beräkningsgraf som multiplicerar två tal tillsammans.

Under exemplet kommer vi att multiplicera X_1 och X_2 tillsammans. Tensorflow kommer att skapa en nod för att ansluta operationen. I vårt exempel kallas det multiplicera. När grafen är fastställd kommer Tensorflow-beräkningsmotorerna att multiplicera X_1 och X_2.

Beräkningar fungerar i TensorFlow
TensorFlow Exempel

Slutligen kommer vi att köra en TensorFlow-session som kommer att köra beräkningsgrafen med värdena X_1 och X_2 och skriva ut resultatet av multiplikationen.

Låt oss definiera ingångsnoderna X_1 och X_2. När vi skapar en nod i Tensorflow måste vi välja vilken typ av nod som ska skapas. X1- och X2-noderna kommer att vara en platshållarnod. Platshållaren tilldelar ett nytt värde varje gång vi gör en beräkning. Vi kommer att skapa dem som en TF-punktplatshållarnod.

Steg 1: Definiera variabeln

X_1 = tf.placeholder(tf.float32, name = "X_1")
X_2 = tf.placeholder(tf.float32, name = "X_2")

När vi skapar en platshållarnod måste vi skicka in datatypen kommer att lägga till siffror här så att vi kan använda en flyttalsdatatyp, låt oss använda tf.float32. Vi måste också ge denna nod ett namn. Detta namn kommer att dyka upp när vi tittar på de grafiska visualiseringarna av vår modell. Låt oss namnge denna nod X_1 genom att skicka in en parameter som heter namn med värdet X_1 och låt oss nu definiera X_2 på samma sätt. X_2.

Steg 2: Definiera beräkningen

multiply = tf.multiply(X_1, X_2, name = "multiply")

Nu kan vi definiera noden som utför multiplikationsoperationen. I Tensorflow kan vi göra det genom att skapa en tf.multiply-nod.

Vi kommer att skicka in X_1- och X_2-noderna till multiplikationsnoden. Den säger åt tensorflow att länka dessa noder i beräkningsgrafen, så vi ber den att dra värdena från x och y och multiplicera resultatet. Låt oss också ge multiplikationsnoden namnet multiplicera. Det är hela definitionen för vår enkla beräkningsgraf.

Steg 3: Utför operationen

För att utföra operationer i grafen måste vi skapa en session. I Tensorflow görs det av tf.Session(). Nu när vi har en session kan vi be sessionen att köra operationer på vår beräkningsgraf genom att anropa session. För att köra beräkningen måste vi använda kör.

När additionsoperationen körs kommer den att se att den behöver ta tag i värdena för X_1- och X_2-noderna, så vi måste också mata in värden för X_1 och X_2. Vi kan göra det genom att ange en parameter som heter feed_dict. Vi skickar värdet 1,2,3 för X_1 och 4,5,6 för X_2.

Vi skriver ut resultatet med print(result). Vi bör se 4, 10 och 18 för 1×4, 2×5 och 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.]

Alternativ för att ladda data till TensorFlow

Det första steget innan träning a maskininlärningsalgoritm är att ladda data. Det finns två vanliga sätt att ladda data:

1. Ladda data till minnet: Det är den enklaste metoden. Du laddar all din data i minnet som en enda array. Du kan skriva a Python koda. Dessa kodrader är inte relaterade till Tensorflow.

2. Tensorflow datapipeline: Tensorflow har inbyggt API som hjälper dig att ladda data, utföra operationen och mata maskininlärningsalgoritmen enkelt. Denna metod fungerar mycket bra, särskilt när du har en stor datamängd. Till exempel är bildposter kända för att vara enorma och passar inte in i minnet. Datapipeline hanterar minnet själv

Vilken lösning ska man använda?

Ladda data i minnet

Om din datauppsättning inte är för stor, dvs mindre än 10 gigabyte, kan du använda den första metoden. Data kan passa in i minnet. Du kan använda ett berömt bibliotek som heter Pandas för att importera CSV-filer. Du kommer att lära dig mer om pandor i nästa handledning.

Ladda data med Tensorflow pipeline

Den andra metoden fungerar bäst om du har en stor datamängd. Till exempel, om du har en datauppsättning på 50 gigabyte och din dator bara har 16 gigabyte minne så kommer maskinen att krascha.

I den här situationen måste du bygga en Tensorflow-pipeline. Pipelinen kommer att ladda data i batch, eller liten bit. Varje batch kommer att skjutas till pipeline och vara redo för utbildningen. Att bygga en pipeline är en utmärkt lösning eftersom det låter dig använda parallell beräkning. Det betyder att Tensorflow kommer att träna modellen över flera processorer. Det främjar beräkningen och tillåter träning av kraftfulla neurala nätverk.

Du kommer att se i nästa handledning om hur du bygger en betydande pipeline för att mata ditt neurala nätverk.

I ett nötskal, om du har en liten datauppsättning kan du ladda data i minnet med Pandas bibliotek.

Om du har en stor datauppsättning och du vill använda flera processorer, kommer du att vara mer bekväm att arbeta med Tensorflow-pipeline.

Hur man skapar TensorFlow Pipeline

Här är stegen för att skapa en TensorFlow-pipeline:

I exemplet innan lade vi manuellt till tre värden för X_1 och X_2. Nu kommer vi att se hur man laddar data till Tensorflow:

Steg 1) Skapa data

Först och främst, låt oss använda numpy-biblioteket för att generera två slumpmässiga värden.

import numpy as np
x_input = np.random.sample((1,2))
print(x_input)

[[0.8835775 0.23766977]]

Steg 2) Skapa platshållaren

Liksom i föregående exempel skapar vi en platshållare med namnet X. Vi måste ange formen på tensorn explicit. I fallet kommer vi att ladda en array med endast två värden. Vi kan skriva formen som form=[1,2]

# using a placeholder
x = tf.placeholder(tf.float32, shape=[1,2], name = 'X')

Steg 3) Definiera datasetmetoden

Därefter måste vi definiera datamängden där vi kan fylla i värdet på platshållaren x. Vi måste använda metoden tf.data.Dataset.from_tensor_slices

dataset = tf.data.Dataset.from_tensor_slices(x)

Steg 4) Skapa pipeline

I steg fyra måste vi initiera pipeline där data ska flöda. Vi måste skapa en iterator med make_initializable_iterator. Vi kallar den iterator. Sedan måste vi anropa den här iteratorn för att mata nästa batch data, get_next. Vi namnger det här steget get_next. Observera att i vårt exempel finns det bara en batch data med bara två värden.

iterator = dataset.make_initializable_iterator() 
get_next = iterator.get_next()

Steg 5) Utför operationen

Det sista steget liknar det föregående exemplet. Vi initierar en session och kör operationsiteratorn. Vi matar feed_dict med värdet som genereras av numpy. Dessa två värden kommer att fylla platshållaren x. Sedan kör vi get_next för att skriva ut 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]

Sammanfattning

  • TensorFlow betyder: TensorFlow är det mest kända biblioteket för djupinlärning de senaste åren. En utövare som använder TensorFlow kan bygga vilken djupinlärningsstruktur som helst, som CNN, RNN eller enkla artificiella neurala nätverk.
  • TensorFlow används mest av akademiker, startups och stora företag. Google använder TensorFlow i nästan alla Googles dagliga produkter inklusive Gmail, Foto och Googles sökmotor.
  • Google Brain-teamets utvecklade TensorFlow för att fylla gapet mellan forskare och produktutvecklare. 2015 offentliggjorde de TensorFlow; det växer snabbt i popularitet. Nuförtiden är TensorFlow det djupa lärandebiblioteket med flest arkiv på GitHub.
  • Utövare använder Tensorflow eftersom det är lätt att distribuera i skala. Den är byggd för att fungera i molnet eller på mobila enheter som iOS och Android.

Tensorflow fungerar i en session. Varje session definieras av en graf med olika beräkningar. Ett enkelt exempel kan vara att multiplicera till tal. I Tensorflow krävs tre steg:

  1. Definiera variabeln
X_1 = tf.placeholder(tf.float32, name = "X_1")
X_2 = tf.placeholder(tf.float32, name = "X_2")
  1. Definiera beräkningen
multiply = tf.multiply(X_1, X_2, name = "multiply")
  1. Utfö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 vanlig praxis i Tensorflow är att skapa en pipeline för att ladda data. Om du följer dessa fem steg kommer du att kunna ladda data till TensorFLow:

  1. Skapa data
import numpy as np
x_input = np.random.sample((1,2))
print(x_input)
  1. Skapa platshållaren
x = tf.placeholder(tf.float32, shape=[1,2], name = 'X')
  1. Definiera datasetmetoden
dataset = tf.data.Dataset.from_tensor_slices(x)
  1. Skapa pipeline
iterator = dataset.make_initializable_iterator() get_next = iterator.get_next()
  1. Kör programmet
with tf.Session() as sess:  
sess.run(iterator.initializer, feed_dict={ x: x_input })  
print(sess.run(get_next))

Sammanfatta detta inlägg med: