Keras handledning

Vad รคr Keras?

Keras รคr ett Open Source Neural Network-bibliotek skrivet i Python som kรถrs ovanpรฅ Theano eller Tensorflow. Den รคr designad fรถr att vara modulรคr, snabb och enkel att anvรคnda. Det utvecklades av Franรงois Chollet, en Google-ingenjรถr. Keras hanterar inte lรฅgnivรฅberรคkningar. Istรคllet anvรคnder den ett annat bibliotek fรถr att gรถra det, kallat "Backend.

Keras รคr hรถgnivรฅ API-omslag fรถr lรฅgnivรฅ-API, som kan kรถras ovanpรฅ TensorFlow, CNTK eller Theano. Keras High-Level API hanterar hur vi gรถr modeller, definierar lager eller stรคller in flera input-output-modeller. Pรฅ denna nivรฅ sammanstรคller Keras รคven vรฅr modell med fรถrlust- och optimeringsfunktioner, trรคningsprocess med passformsfunktion. Keras in Python hanterar inte Low-Level API som att gรถra berรคkningsgrafen, gรถra tensorer eller andra variabler eftersom det har hanterats av "backend"-motorn.

Vad รคr en backend?

Backend รคr en term i Keras som utfรถr all lรฅgnivรฅberรคkning som tensorprodukter, faltningar och mรฅnga andra saker med hjรคlp av andra bibliotek som Tensorflow eller Theano. Sรฅ "backend-motorn" kommer att utfรถra berรคkningen och utvecklingen av modellerna. Tensorflow รคr standard "backend-motor" men vi kan รคndra det i konfigurationen.

Theano, Tensorflow och CNTK Backend

Backend av Theano

Theano รคr ett รถppen kรคllkodsprojekt som utvecklats av MILA-gruppen vid University of Montreal, Quebec, Kanada. Det var det fรถrsta allmรคnt anvรคnda ramverket. Det รคr en Python bibliotek som hjรคlper till med flerdimensionella arrayer fรถr matematiska operationer med Numpy eller Scipy. Theano kan anvรคnda GPU:er fรถr snabbare berรคkning, den kan ocksรฅ automatiskt bygga symboliska grafer fรถr berรคkningsgradienter. Pรฅ sin hemsida hรคvdar Theano att den kan kรคnna igen numeriskt instabila uttryck och berรคkna dem med mer stabila algoritmer, detta รคr vรคldigt anvรคndbart fรถr vรฅra instabila uttryck.

Backend av TensorFlow

ร… andra sidan รคr Tensorflow den stigande stjรคrnan inom ramverket fรถr djupinlรคrning. Utvecklat av Googles hjรคrnteam รคr det det mest populรคra verktyget fรถr djupinlรคrning. Med mรฅnga funktioner och forskare bidrar till att utveckla detta ramverk fรถr djupt lรคrande.

Backend av CNTK

En annan backend-motor fรถr Keras รคr The Microsoft Cognitive Toolkit eller CNTK. Det รคr ett ramverk fรถr djupinlรคrning med รถppen kรคllkod som utvecklats av Microsoft Team. Den kan kรถras pรฅ flera GPU:er eller flera maskiner fรถr att trรคna djupinlรคrningsmodeller i massiv skala. I vissa fall rapporterades CNTK snabbare รคn andra ramverk som Tensorflow eller Theano. Nรคsta i denna Keras CNN-handledning kommer vi att jรคmfรถra backends av Theano, TensorFlow och CNTK.

Jรคmfรถr backends

Vi mรฅste gรถra ett riktmรคrke fรถr att kunna jรคmfรถra dessa tvรฅ backends. Som du kan se i Jeong-Yoon Lees riktmรคrke, jรคmfรถrs prestandan fรถr 3 olika backends pรฅ olika hรฅrdvara. Och resultatet รคr att Theano รคr lรฅngsammare รคn den andra backend, rapporteras det 50 gรฅnger lรฅngsammare, men noggrannheten ligger nรคra varandra.

Annan benchmark-tester utfรถrs av Jasmeet Bhatia. Han rapporterade att Theano รคr lรฅngsammare รคn Tensorflow fรถr nรฅgot test. Men den รถvergripande noggrannheten รคr nรคstan densamma fรถr alla nรคtverk som testades.

Sรฅ mellan Theano, Tensorflow och CTK รคr det uppenbart att TensorFlow รคr bรคttre รคn Theano. Med TensorFlow รคr berรคkningstiden mycket kortare och CNN รคr bรคttre รคn de andra.

Nรคsta i denna Keras Python tutorial, vi kommer att lรคra oss om skillnaden mellan Keras och TensorFlow (Keras vs Tensorflow).

Keras vs Tensorflow

Driftparametrar Keras Tensorflรถde
Typ API-omslag pรฅ hรถg nivรฅ Lรฅgnivรฅ API
Komplexitet Lรคtt att anvรคnda om du Python sprรฅk Du mรฅste lรคra dig syntaxen fรถr att anvรคnda nรฅgra av Tensorflow-funktionerna
Syfte Snabb distribution fรถr att gรถra modell med standardlager Lรฅter dig gรถra en godtycklig berรคkningsgraf eller modelllager
verktyg Anvรคnder andra API-felsรถkningsverktyg som TFDBG Du kan anvรคnda Tensorboard visualiseringsverktyg
Community Stora aktiva samhรคllen Stora aktiva samhรคllen och brett delade resurser

Fรถrdelar med Keras

Snabb implementering och lรคtt att fรถrstรฅ

Keras รคr vรคldigt snabb att gรถra en nรคtverksmodell. Om du vill gรถra en enkel nรคtverksmodell med nรฅgra rader, Python Keras kan hjรคlpa dig med det. Titta pรฅ Keras-exemplet nedan:

from keras.models import Sequential
from keras.layers import Dense, Activation

model = Sequential()
model.add(Dense(64, activation='relu', input_dim=50)) #input shape of 50
model.add(Dense(28, activation='relu')) #input shape of 50
model.add(Dense(10, activation='softmax'))

Pรฅ grund av vรคnlig API kan vi enkelt fรถrstรฅ processen. Att skriva koden med en enkel funktion och inget behov av att stรคlla in flera parametrar.

Stort samhรคllsstรถd

Det finns massor av AI-gemenskaper som anvรคnder Keras fรถr sitt ramverk fรถr Deep Learning. Mรฅnga av dem publicerar sina koder samt tutorials fรถr allmรคnheten.

Har flera backends

Du kan vรคlja Tensorflow, CNTK och Theano som din backend med Keras. Du kan vรคlja en annan backend fรถr olika projekt beroende pรฅ dina behov. Varje backend har sin egen unika fรถrdel.

Plattformsรถverskridande och enkel modellinstallation

Med en mรคngd olika enheter och plattformar som stรถds kan du distribuera Keras pรฅ vilken enhet som helst

  • iOS med CoreML
  • Android med Tensorflow Android,
  • Webblรคsare med .js-stรถd
  • Molnmotor
  • hallon Pi

Stรถd fรถr flera GPU:er

Du kan trรคna Keras pรฅ en enda GPU eller anvรคnda flera GPU:er samtidigt. Eftersom Keras har ett inbyggt stรถd fรถr dataparallellism sรฅ att den kan bearbeta stora datamรคngder och pรฅskynda tiden som behรถvs fรถr att trรคna den.

Nackdelar med Keras

Kan inte hantera API pรฅ lรฅg nivรฅ

Keras hanterar bara API pรฅ hรถg nivรฅ som kรถrs ovanpรฅ andra ramverk eller backend-motorer som Tensorflow, Theano eller CNTK. Sรฅ det รคr inte sรคrskilt anvรคndbart om du vill gรถra ditt eget abstrakta lager fรถr dina forskningsรคndamรฅl eftersom Keras redan har fรถrkonfigurerade lager.

Installerar Keras

I det hรคr avsnittet kommer vi att undersรถka olika metoder som รคr tillgรคngliga fรถr att installera Keras

Direktinstallation eller virtuell miljรถ

Vilken รคr bรคttre? Direktinstallera till nuvarande python eller anvรคnda en virtuell miljรถ? Jag fรถreslรฅr att du anvรคnder en virtuell miljรถ om du har mรฅnga projekt. Vill du veta varfรถr? Detta beror pรฅ att olika projekt kan anvรคnda en annan version av ett keras-bibliotek.

Jag har till exempel ett projekt som behรถver Python 3.5 anvรคnder OpenCV 3.3 med รคldre Keras-Theano backend men i det andra projektet mรฅste jag anvรคnda Keras med den senaste versionen och en Tensorflow som backend med Python 3.6.6-stรถd

Vi vill vรคl inte att Keras-biblioteket ska stรฅ i konflikt med varandra? Sรฅ vi anvรคnder en virtuell miljรถ fรถr att lokalisera projektet med en specifik typ av bibliotek eller sรฅ kan vi anvรคnda en annan plattform som molntjรคnst fรถr att gรถra vรฅr berรคkning รฅt oss som Amazon Webb-service.

Installerar Keras pรฅ Amazon Webbtjรคnst (AWS)

Amazon Web Service รคr en plattform som erbjuder Cloud Computing-tjรคnster och produkter fรถr forskare eller andra รคndamรฅl. AWS hyr ut sin hรฅrdvara, nรคtverk, Databas etc. sรฅ att vi kan anvรคnda det direkt frรฅn internet. En av de populรคra AWS-tjรคnsterna fรถr djupinlรคrning รคr Amazon Machine Image Deep Learning Service eller DL

Fรถr detaljerade instruktioner om hur du anvรคnder AWS, se detta handledning

Anmรคrkning om AMI: Du kommer att ha fรถljande AMI tillgรคnglig

Installerar Keras pรฅ AWS

AWS Deep Learning AMI รคr en virtuell miljรถ i AWS EC2 Service som hjรคlper forskare eller praktiker att arbeta med Deep Learning. DLAMI erbjuder frรฅn smรฅ CPU-motorer upp till kraftfulla multi-GPU-motorer med fรถrkonfigurerad CUDA, cuDNN, och kommer med en mรคngd olika ramverk fรถr djupinlรคrning.

Om du vill anvรคnda det direkt bรถr du vรคlja Deep Learning AMI eftersom det kommer fรถrinstallerat med populรคra ramar fรถr djupinlรคrning.

Men om du vill prova ett anpassat ramverk fรถr djupinlรคrning fรถr forskning, bรถr du installera Deep Learning Base AMI eftersom det kommer med grundlรคggande bibliotek som CUDA, cuDNN, GPU-drivrutiner och andra nรถdvรคndiga bibliotek fรถr att kรถra med din djupinlรคrningsmiljรถ.

Hur man installerar Keras pรฅ Amazon SageMaker

Amazon SageMaker รคr en plattform fรถr djupinlรคrning som hjรคlper dig med utbildning och implementering av nรคtverk fรถr djupinlรคrning med den bรคsta algoritmen.

Som nybรถrjare รคr detta den รถverlรคgset enklaste metoden att anvรคnda Keras. Nedan รคr en process om hur man installerar Keras pรฅ Amazon SageMaker:

Steg 1) ร–ppna Amazon SageMaker

I det fรถrsta steget, ร–ppna Amazon Sagemaker konsolen och klicka pรฅ Skapa anteckningsboksinstans.

Installera Keras pรฅ Amazon SageMaker

Steg 2) Ange detaljerna

  1. Ange ditt anteckningsblocks namn.
  2. Skapa en IAM-roll. Det kommer att skapa en AMI-roll Amazon IAM roll i formatet AmazonSageMaker-Executionrole-ร…ร…ร…ร…MMDD|HHmmSS.
  3. Slutligen vรคljer du Skapa anteckningsboksinstans. Efter nรฅgra รถgonblick, Amazon Sagemaker lanserar en anteckningsbok-instans.

Installera Keras pรฅ Amazon SageMaker

Anmรคrkningar: Om du vill komma รฅt resurser frรฅn din VPC, stรคll in den direkta internetรฅtkomsten som aktiverad. Annars kommer den hรคr notebook-instansen inte att ha tillgรฅng till internet, sรฅ det รคr omรถjligt att trรคna eller vara vรคrd fรถr modeller

Steg 3) Starta instansen

Klicka pรฅ ร–ppna fรถr att starta instansen

Installera Keras pรฅ Amazon SageMaker

Steg 4) Bรถrja koda

In Jupyter, Klicka pรฅ Ny> conda_tensorflow_p36 och du รคr redo att koda

Installera Keras pรฅ Amazon SageMaker

Installera Keras i Linux

Fรถr att aktivera Keras med Tensorflow som backend-motor mรฅste vi fรถrst installera Tensorflow. Kรถr det hรคr kommandot fรถr att installera tensorflow med CPU (ingen GPU)

pip install --upgrade tensorflow

om du vill aktivera GPU-stรถdet fรถr tensorflow kan du anvรคnda det hรคr kommandot

pip install --upgrade tensorflow-gpu

Installera Keras pรฅ Linux

lรฅt oss checka in Python fรถr att se om vรฅr installation รคr framgรฅngsrik genom att skriva

user@user:~$ python
Python 3.6.4 (default, Mar 20 2018, 11:10:20) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow
>>>

om det inte finns nรฅgot felmeddelande รคr installationsprocessen framgรฅngsrik

Installera Keras

Nรคr vi har installerat Tensorflow, lรฅt oss bรถrja installera keras. Skriv detta kommando i terminalen

pip install keras

det kommer att bรถrja installera Keras och รคven alla dess beroenden. Du bรถr se nรฅgot i stil med detta:

Installera Keras

Nu har vi Keras installerat i vรฅrt system!

verifiera

Innan vi bรถrjar anvรคnda Keras bรถr vi kontrollera om vรฅra Keras anvรคnder Tensorflow som backend genom att รถppna konfigurationsfilen:

gedit ~/.keras/keras.json

du borde se nรฅgot sรฅnt hรคr

{
    "floatx": "float32",
    "epsilon": 1e-07,
    "backend": "tensorflow",
    "image_data_format": "channels_last"
}

som du kan se anvรคnder "backend" tensorflow. Det betyder att keras anvรคnder Tensorflow som backend som vi fรถrvรคntade oss

och kรถr det nu pรฅ terminalen genom att skriva

user@user:~$ python3
Python 3.6.4 (default, Mar 20 2018, 11:10:20) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import keras
Using TensorFlow backend.
>>> 

Hur man installerar Keras pรฅ Windows

Innan vi installerar Tensorflรถde och Keras, vi borde installera Python, pip och virtualenv. Om du redan har installerat dessa bibliotek bรถr du fortsรคtta till nรคsta steg, annars gรถr du sรฅ hรคr:

installera Python 3 genom att ladda ner frรฅn denna lรคnk

Installera pip genom att kรถra detta

Installera virtualenv med detta kommando

pip3 install โ€“U pip virtualenv

installera Microsoft Visuell C++ 2015 omdistribuerbar uppdatering 3

Kรถr sedan det hรคr skriptet

pip3 install virtualenv

Stรคll in virtuell miljรถ

Detta anvรคnds fรถr att isolera arbetssystemet med huvudsystemet.

virtualenv โ€“-system-site-packages โ€“p python3 ./venv

Aktivera miljรถn

.\venv\Scripts\activate

Efter att ha fรถrberett miljรถn fรถrblir installationen av Tensorflow och Keras samma som Linux. Nรคsta i den hรคr sjรคlvstudien fรถr djupinlรคrning med Keras kommer vi att lรคra oss om Keras grunder fรถr djupinlรคrning.

Keras Fundamentals for Deep Learning

Huvudstrukturen i Keras รคr modellen som definierar hela grafen fรถr ett nรคtverk. Du kan lรคgga till fler lager i en befintlig modell fรถr att bygga en anpassad modell som du behรถver fรถr ditt projekt.

Sรฅ hรคr gรถr du en sekventiell modell och nรฅgra vanliga lager inom djupinlรคrning

1. Sekventiell modell

from keras.models import Sequential
from keras.layers import Dense, Activation,Conv2D,MaxPooling2D,Flatten,Dropout

model = Sequential()

2. Konvolutionellt lager

Det hรคr รคr en Keras Python exempel pรฅ faltningslager som ingรฅngslager med ingรฅngsformen 320x320x3, med 48 filter i storleken 3ร—3 och anvรคnd ReLU som en aktiveringsfunktion.

input_shape=(320,320,3) #this is the input shape of an image 320x320x3
model.add(Conv2D(48, (3, 3), activation='relu', input_shape= input_shape))

en annan typ รคr

model.add(Conv2D(48, (3, 3), activation='relu'))

3.MaxPooling Lager

Fรถr att nedsampla indatarepresentationen, anvรคnd MaxPool2d och ange kรคrnans storlek

model.add(MaxPooling2D(pool_size=(2, 2)))

4. Tรคt lager

lรคgga till ett helt anslutet lager genom att bara ange utdatastorleken

model.add(Dense(256, activation='relu'))

5. Avhoppslager

Lรคgger till dropout-lager med 50 % sannolikhet

model.add(Dropout(0.5))

Sammanstรคlla, trรคna och utvรคrdera

Nรคr vi har definierat vรฅr modell, lรฅt oss bรถrja trรคna dem. Det krรคvs att fรถrst kompilera nรคtverket med fรถrlustfunktionen och optimeringsfunktionen. Detta kommer att tillรฅta nรคtverket att รคndra vikter och minimera fรถrlusten.

model.compile(loss='mean_squared_error', optimizer='adam')

Fรถr att bรถrja trรคna, anvรคnd passform fรถr att mata trรคnings- och valideringsdata till modellen. Detta gรถr att du kan trรคna nรคtverket i omgรฅngar och stรคlla in epoker.

model.fit(X_train, X_train, batch_size=32, epochs=10, validation_data=(x_val, y_val))

Vรฅrt sista steg รคr att utvรคrdera modellen med testdata.

score = model.evaluate(x_test, y_test, batch_size=32)

Lรฅt oss fรถrsรถka anvรคnda enkel linjรคr regression

import keras
from keras.models import Sequential
from keras.layers import Dense, Activation
import numpy as np
import matplotlib.pyplot as plt 
 
x = data = np.linspace(1,2,200)
y = x*4 + np.random.randn(*x.shape) * 0.3


model = Sequential()
model.add(Dense(1, input_dim=1, activation='linear'))

model.compile(optimizer='sgd', loss='mse', metrics=['mse'])

weights = model.layers[0].get_weights()
w_init = weights[0][0][0]
b_init = weights[1][0]
print('Linear regression model is initialized with weights w: %.2f, b: %.2f' % (w_init, b_init)) 


model.fit(x,y, batch_size=1, epochs=30, shuffle=False)

weights = model.layers[0].get_weights()
w_final = weights[0][0][0]
b_final = weights[1][0]
print('Linear regression model is trained to have weight w: %.2f, b: %.2f' % (w_final, b_final))

predict = model.predict(data)

plt.plot(data, predict, 'b', data , y, 'k.')
plt.show()

Efter att ha trรคnat data ska utdata se ut sรฅ hรคr

linjรคr regression

med den ursprungliga vikten

Linear regression model is initialized with weights w: 0.37, b: 0.00

och slutvikt

Linear regression model is trained to have weight w: 3.70, b: 0.61

Finjustera fรถrtrรคnade modeller i Keras och hur man anvรคnder dem

Varfรถr vi anvรคnder Fine Tune Models och nรคr vi anvรคnder det

Finjustering รคr en uppgift att justera en fรถrtrรคnad modell sรฅ att parametrarna skulle anpassa sig till den nya modellen. Nรคr vi vill trรคna frรฅn grunden pรฅ en ny modell behรถver vi en stor mรคngd data, sรฅ att nรคtverket kan hitta alla parametrar. Men i det hรคr fallet kommer vi att anvรคnda en fรถrtrรคnad modell sรฅ att parametrarna redan รคr inlรคrda och har en vikt.

Om vi โ€‹โ€‹till exempel vill trรคna vรฅr egen Keras-modell fรถr att lรถsa ett klassificeringsproblem men vi bara har en liten mรคngd data, kan vi lรถsa detta genom att anvรคnda en ร–verfรถr lรคrande + Finjusteringsmetod.

Med hjรคlp av ett fรถrtrรคnat nรคtverk och vikter behรถver vi inte trรคna hela nรคtverket. Vi behรถver bara trรคna det sista lagret som anvรคnds fรถr att lรถsa vรฅr uppgift som vi kallar det Fine-Tuning-metoden.

Fรถrberedelse av nรคtverksmodeller

Fรถr den fรถrtrรคnade modellen kan vi ladda en mรคngd olika modeller som Keras redan har i sitt bibliotek som:

  • VGG16
  • Start V3
  • ResNet
  • MobileNet
  • Xception
  • InceptionResNetV2

Men i denna process kommer vi att anvรคnda VGG16 nรคtverksmodell och imageNet som vรฅr vikt fรถr modellen. Vi kommer att finjustera ett nรคtverk fรถr att klassificera 8 olika typer av klasser med hjรคlp av bilder frรฅn Kaggle Natural Images Dataset

VGG16 modellarkitektur

VGG16 modellarkitektur

kรคlla

Ladda upp vรฅr data till AWS S3 Bucket

Fรถr vรฅr trรคningsprocess kommer vi att anvรคnda en bild av naturliga bilder frรฅn 8 olika klasser som flygplan, bil, katt, hund, blomma, frukt, motorcykel och person. Fรถrst mรฅste vi ladda upp vรฅr data till Amazon S3 hink.

Amazon S3 hink

Steg 1) Efter att ha loggat in pรฅ ditt S3-konto, lรฅt oss skapa en hink genom att klocka Skapa hink

Laddar upp data till AWS S3 Bucket

Steg 2) Vรคlj nu ett Bucket Name och din region enligt ditt konto. Se till att hinkens namn รคr tillgรคngligt. Efter det klicka Skapa.

Laddar upp data till AWS S3 Bucket

Steg 3) Som du kan se รคr din hink redo att anvรคndas. Men som du kan se รคr Access inte offentlig, det รคr bra fรถr dig om du vill hรฅlla det privat fรถr dig sjรคlv. Du kan รคndra den hรคr hinken fรถr allmรคn รฅtkomst i Bucket Properties

Laddar upp data till AWS S3 Bucket

Steg 4) Nu bรถrjar du ladda upp din trรคningsdata till din Bucket. Hรคr kommer jag att ladda upp filen tar.gz som bestรฅr av bilder fรถr trรคning och testprocess.

Laddar upp data till AWS S3 Bucket

Steg 5) Klicka nu pรฅ din fil och kopiera Lรคnk sรฅ att vi kan ladda ner den.

Laddar upp data till AWS S3 Bucket

Fรถrberedelse av data

Vi mรฅste generera vรฅra trรคningsdata med hjรคlp av Keras ImageDataGenerator.

Fรถrst mรฅste du ladda ner med wget med lรคnken till din fil frรฅn S3 Bucket.

!wget https://s3.us-east-2.amazonaws.com/naturalimages02/images.tar.gz		
!tar -xzf images.tar.gz

Nรคr du har laddat ner data, lรฅt oss bรถrja utbildningsprocessen.

from keras.preprocessing.image import ImageDataGenerator
import numpy as np
import matplotlib.pyplot as plt

train_path = 'images/train/'
test_path = 'images/test/'
batch_size = 16
image_size = 224
num_class = 8


train_datagen = ImageDataGenerator(validation_split=0.3,
                                   shear_range=0.2,
                                   zoom_range=0.2,
                                   horizontal_flip=True)

train_generator = train_datagen.flow_from_directory(
                        directory=train_path,
                        target_size=(image_size,image_size),
                        batch_size=batch_size,
                        class_mode='categorical',
                        color_mode='rgb',
                        shuffle=True)

BilddataGenerator kommer att gรถra en X_training data frรฅn en katalog. Underkatalogen i den katalogen kommer att anvรคndas som en klass fรถr varje objekt. Bilden kommer att laddas med RGB-fรคrglรคget, med det kategoriska klasslรคget fรถr Y_training-data, med en batchstorlek pรฅ 16. Blanda slutligen data.

Lรฅt oss se vรฅra bilder slumpmรคssigt genom att plotta dem med matplotlib

x_batch, y_batch = train_generator.next()

fig=plt.figure()
columns = 4
rows = 4
for i in range(1, columns*rows):
    num = np.random.randint(batch_size)
    image = x_batch[num].astype(np.int)
    fig.add_subplot(rows, columns, i)
    plt.imshow(image)
plt.show()

Fรถrberedelse av data

Lรฅt oss sedan skapa vรฅr nรคtverksmodell frรฅn VGG16 med imageNet fรถrtrรคnad vikt. Vi kommer att frysa dessa lager sรฅ att lagren inte gรฅr att trรคna fรถr att hjรคlpa oss att minska berรคkningstiden.

Skapar vรฅr modell frรฅn VGG16

import keras
from keras.models import Model, load_model
from keras.layers import Activation, Dropout, Flatten, Dense
from keras.preprocessing.image import ImageDataGenerator
from keras.applications.vgg16 import VGG16


#Load the VGG model
base_model = VGG16(weights='imagenet', include_top=False, input_shape=(image_size, image_size, 3))

print(base_model.summary())

    # Freeze the layers 
for layer in base_model.layers:
    layer.trainable = False
 
# # Create the model
model = keras.models.Sequential()

# # Add the vgg convolutional base model
model.add(base_model)
 
# # Add new layers
model.add(Flatten())
model.add(Dense(1024, activation='relu'))
model.add(Dense(1024, activation='relu'))
model.add(Dense(num_class, activation='softmax'))
 
# # Show a summary of the model. Check the number of trainable parameters    
print(model.summary())

Som du kan se nedan, sammanfattningen av vรฅr nรคtverksmodell. Frรฅn en ingรฅng frรฅn VGG16 Layers lรคgger vi till 2 Fully Connected Layer som extraherar 1024 funktioner och ett utdatalager som kommer att berรคkna de 8 klasserna med softmax-aktiveringen.

Layer (type)                 Output Shape              Param #   
=================================================================
vgg16 (Model)                (None, 7, 7, 512)         14714688  
_________________________________________________________________
flatten_1 (Flatten)          (None, 25088)             0         
_________________________________________________________________
dense_1 (Dense)              (None, 1024)              25691136  
_________________________________________________________________
dense_2 (Dense)              (None, 1024)              1049600   
_________________________________________________________________
dense_3 (Dense)              (None, 8)                 8200      
=================================================================
Total params: 41,463,624
Trainable params: 26,748,936
Non-trainable params: 14,714,688

Utbildning

# # Compile the model
from keras.optimizers import SGD

model.compile(loss='categorical_crossentropy',
          optimizer=SGD(lr=1e-3),
          metrics=['accuracy'])

# # Start the training process
# model.fit(x_train, y_train, validation_split=0.30, batch_size=32, epochs=50, verbose=2)

# # #save the model
# model.save('catdog.h5')

history = model.fit_generator(
        train_generator,
        steps_per_epoch=train_generator.n/batch_size,
        epochs=10)
        
model.save('fine_tune.h5')

# summarize history for accuracy
import matplotlib.pyplot as plt

plt.plot(history.history['loss'])
plt.title('loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['loss'], loc='upper left')
plt.show()

Resultat

Epoch 1/10
432/431 [==============================] - 53s 123ms/step - loss: 0.5524 - acc: 0.9474 
Epoch 2/10
432/431 [==============================] - 52s 119ms/step - loss: 0.1571 - acc: 0.9831
Epoch 3/10
432/431 [==============================] - 51s 119ms/step - loss: 0.1087 - acc: 0.9871
Epoch 4/10
432/431 [==============================] - 51s 119ms/step - loss: 0.0624 - acc: 0.9926
Epoch 5/10
432/431 [==============================] - 51s 119ms/step - loss: 0.0591 - acc: 0.9938
Epoch 6/10
432/431 [==============================] - 51s 119ms/step - loss: 0.0498 - acc: 0.9936
Epoch 7/10
432/431 [==============================] - 51s 119ms/step - loss: 0.0403 - acc: 0.9958
Epoch 8/10
432/431 [==============================] - 51s 119ms/step - loss: 0.0248 - acc: 0.9959
Epoch 9/10
432/431 [==============================] - 51s 119ms/step - loss: 0.0466 - acc: 0.9942
Epoch 10/10
432/431 [==============================] - 52s 120ms/step - loss: 0.0338 - acc: 0.9947

Utbildning

Som du kan se minskar vรฅra fรถrluster avsevรคrt och noggrannheten รคr nรคstan 100%. Fรถr att testa vรฅr modell valde vi slumpmรคssigt bilder รถver internet och la dem i testmappen med en annan klass att testa

Testar vรฅr modell

model = load_model('fine_tune.h5')

test_datagen = ImageDataGenerator()
train_generator = train_datagen.flow_from_directory(
                        directory=train_path,
                        target_size=(image_size,image_size),
                        batch_size=batch_size,
                        class_mode='categorical',
                        color_mode='rgb',
                        shuffle=True)

test_generator = test_datagen.flow_from_directory(
                        directory=test_path, 
                        target_size=(image_size, image_size),
                        color_mode='rgb',
                        shuffle=False,
                        class_mode='categorical',
                        batch_size=1)

filenames = test_generator.filenames
nb_samples = len(filenames)

fig=plt.figure()
columns = 4
rows = 4
for i in range(1, columns*rows -1):
    x_batch, y_batch = test_generator.next()

    name = model.predict(x_batch)
    name = np.argmax(name, axis=-1)
    true_name = y_batch
    true_name = np.argmax(true_name, axis=-1)

    label_map = (test_generator.class_indices)
    label_map = dict((v,k) for k,v in label_map.items()) #flip k,v
    predictions = [label_map[k] for k in name]
    true_value = [label_map[k] for k in true_name]

    image = x_batch[0].astype(np.int)
    fig.add_subplot(rows, columns, i)
    plt.title(str(predictions[0]) + ':' + str(true_value[0]))
    plt.imshow(image)
plt.show()

Och vรฅrt test รคr enligt nedan! Endast 1 bild fรถrutspรฅs fel frรฅn ett test av 14 bilder!

Testmodell

Neuralt nรคtverk fรถr ansiktsigenkรคnning med Keras

Varfรถr vi behรถver erkรคnnande

Vi behรถver igenkรคnning fรถr att gรถra det lรคttare fรถr oss att kรคnna igen eller identifiera en persons ansikte, fรถremรฅlstyp, berรคknade รฅlder pรฅ en person utifrรฅn hans ansikte, eller till och med kรคnna till den personens ansiktsuttryck.

Neuralt nรคtverk fรถr ansiktsigenkรคnning med Keras

Kanske inser du att varje gรฅng du fรถrsรถker markera din vรคns ansikte i ett foto, har funktionen i Facebook gjort det รฅt dig, det vill sรคga att markera din vรคns ansikte utan att du behรถver markera det fรถrst. Detta รคr ansiktsigenkรคnning som tillรคmpas av Facebook fรถr att gรถra det enklare fรถr oss att tagga vรคnner.

Sรฅ hur fungerar det? Varje gรฅng vi markerar vรฅr vรคns ansikte kommer Facebooks AI att lรคra sig det och fรถrsรถka fรถrutsรคga det tills det fรฅr rรคtt resultat. Samma system kommer vi att anvรคnda fรถr att gรถra vรฅr egen ansiktsigenkรคnning. Lรฅt oss bรถrja gรถra vรฅr egen ansiktsigenkรคnning med hjรคlp av Deep Learning

Nรคtverksmodell

Vi kommer att anvรคnda en VGG16 Network Model men med VGGFace-vikt.

VGG16 modellarkitektur

Nรคtverksmodell

Vad รคr VGGFace? det รคr Keras implementering av Deep Face Recognition introducerad av Parkhi, Omkar M. et al. "Djup ansiktsigenkรคnning." BMVC (2015). Ramverket anvรคnder VGG16 som nรคtverksarkitektur.

Du kan ladda ner VGGFace frรฅn github

from keras.applications.vgg16 import VGG16
from keras_vggface.vggface import VGGFace

face_model = VGGFace(model='vgg16', 
                weights='vggface',
                input_shape=(224,224,3)) 
face_model.summary()

Som du kan se nรคtverkssammanfattningen

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         (None, 224, 224, 3)       0         
_________________________________________________________________
conv1_1 (Conv2D)             (None, 224, 224, 64)      1792      
_________________________________________________________________
conv1_2 (Conv2D)             (None, 224, 224, 64)      36928     
_________________________________________________________________
pool1 (MaxPooling2D)         (None, 112, 112, 64)      0         
_________________________________________________________________
conv2_1 (Conv2D)             (None, 112, 112, 128)     73856     
_________________________________________________________________
conv2_2 (Conv2D)             (None, 112, 112, 128)     147584    
_________________________________________________________________
pool2 (MaxPooling2D)         (None, 56, 56, 128)       0         
_________________________________________________________________
conv3_1 (Conv2D)             (None, 56, 56, 256)       295168    
_________________________________________________________________
conv3_2 (Conv2D)             (None, 56, 56, 256)       590080    
_________________________________________________________________
conv3_3 (Conv2D)             (None, 56, 56, 256)       590080    
_________________________________________________________________
pool3 (MaxPooling2D)         (None, 28, 28, 256)       0         
_________________________________________________________________
conv4_1 (Conv2D)             (None, 28, 28, 512)       1180160   
_________________________________________________________________
conv4_2 (Conv2D)             (None, 28, 28, 512)       2359808   
_________________________________________________________________
conv4_3 (Conv2D)             (None, 28, 28, 512)       2359808   
_________________________________________________________________
pool4 (MaxPooling2D)         (None, 14, 14, 512)       0         
_________________________________________________________________
conv5_1 (Conv2D)             (None, 14, 14, 512)       2359808   
_________________________________________________________________
conv5_2 (Conv2D)             (None, 14, 14, 512)       2359808   
_________________________________________________________________
conv5_3 (Conv2D)             (None, 14, 14, 512)       2359808   
_________________________________________________________________
pool5 (MaxPooling2D)         (None, 7, 7, 512)         0         
_________________________________________________________________
flatten (Flatten)            (None, 25088)             0         
_________________________________________________________________
fc6 (Dense)                  (None, 4096)              102764544 
_________________________________________________________________
fc6/relu (Activation)        (None, 4096)              0         
_________________________________________________________________
fc7 (Dense)                  (None, 4096)              16781312  
_________________________________________________________________
fc7/relu (Activation)        (None, 4096)              0         
_________________________________________________________________
fc8 (Dense)                  (None, 2622)              10742334  
_________________________________________________________________
fc8/softmax (Activation)     (None, 2622)              0         
=================================================================
Total params: 145,002,878
Trainable params: 145,002,878
Non-trainable params: 0
_________________________________________________________________
Traceback (most recent call last):

vi kommer att gรถra en ร–verfรถr lรคrande + Finjustering fรถr att gรถra trรคningen snabbare med smรฅ datamรคngder. Fรถrst ska vi frysa baslagren sรฅ att lagren inte gรฅr att trรคna.

for layer in face_model.layers:
    layer.trainable = False

sedan lรคgger vi till vรฅrt eget lager fรถr att kรคnna igen vรฅra testansikten. Vi kommer att lรคgga till 2 helt anslutna lager och ett utdatalager med 5 personer att upptรคcka.

from keras.models import Model, Sequential
from keras.layers import Input, Convolution2D, ZeroPadding2D, MaxPooling2D, Flatten, Dense, Dropout, Activation

person_count = 5

last_layer = face_model.get_layer('pool5').output

x = Flatten(name='flatten')(last_layer)
x = Dense(1024, activation='relu', name='fc6')(x)
x = Dense(1024, activation='relu', name='fc7')(x)
out = Dense(person_count, activation='softmax', name='fc8')(x)

custom_face = Model(face_model.input, out)

Lรฅt oss se vรฅr nรคtverkssammanfattning

Layer (type)                 Output Shape              Param #
=================================================================
input_1 (InputLayer)         (None, 224, 224, 3)       0
_________________________________________________________________
conv1_1 (Conv2D)             (None, 224, 224, 64)      1792
_________________________________________________________________
conv1_2 (Conv2D)             (None, 224, 224, 64)      36928
_________________________________________________________________
pool1 (MaxPooling2D)         (None, 112, 112, 64)      0
_________________________________________________________________
conv2_1 (Conv2D)             (None, 112, 112, 128)     73856
_________________________________________________________________
conv2_2 (Conv2D)             (None, 112, 112, 128)     147584
_________________________________________________________________
pool2 (MaxPooling2D)         (None, 56, 56, 128)       0
_________________________________________________________________
conv3_1 (Conv2D)             (None, 56, 56, 256)       295168
_________________________________________________________________
conv3_2 (Conv2D)             (None, 56, 56, 256)       590080
_________________________________________________________________
conv3_3 (Conv2D)             (None, 56, 56, 256)       590080
_________________________________________________________________
pool3 (MaxPooling2D)         (None, 28, 28, 256)       0
_________________________________________________________________
conv4_1 (Conv2D)             (None, 28, 28, 512)       1180160
_________________________________________________________________
conv4_2 (Conv2D)             (None, 28, 28, 512)       2359808
_________________________________________________________________
conv4_3 (Conv2D)             (None, 28, 28, 512)       2359808
_________________________________________________________________
pool4 (MaxPooling2D)         (None, 14, 14, 512)       0
_________________________________________________________________
conv5_1 (Conv2D)             (None, 14, 14, 512)       2359808
_________________________________________________________________
conv5_2 (Conv2D)             (None, 14, 14, 512)       2359808
_________________________________________________________________
conv5_3 (Conv2D)             (None, 14, 14, 512)       2359808
_________________________________________________________________
pool5 (MaxPooling2D)         (None, 7, 7, 512)         0
_________________________________________________________________
flatten (Flatten)            (None, 25088)             0
_________________________________________________________________
fc6 (Dense)                  (None, 1024)              25691136
_________________________________________________________________
fc7 (Dense)                  (None, 1024)              1049600
_________________________________________________________________
fc8 (Dense)                  (None, 5)                 5125
=================================================================
Total params: 41,460,549
Trainable params: 26,745,861
Non-trainable params: 14,714,688

Som du kan se ovan, efter pool5-lagret, kommer det att tillplattas till en enda funktionsvektor som kommer att anvรคndas av det tรคta lagret fรถr den slutliga igenkรคnningen.

Fรถrbereder vรฅra ansikten

Lรฅt oss nu fรถrbereda vรฅra ansikten. Jag gjorde en katalog bestรฅende av 5 kรคnda personer

  • Jack Ma
  • Jason Statham
  • Johnny Depp
  • Robert Downey Jr
  • Rowan Atkinson

Varje mapp innehรฅller 10 bilder, fรถr varje utbildnings- och utvรคrderingsprocess. Det รคr en mycket liten mรคngd data men det รคr utmaningen, eller hur?

Vi kommer att anvรคnda hjรคlpen av Keras verktyg fรถr att hjรคlpa oss att fรถrbereda data. Denna funktion kommer att iterera i datamappen och sedan fรถrbereda den sรฅ att den kan anvรคndas i utbildningen.

from keras.preprocessing.image import ImageDataGenerator
batch_size = 5
train_path = 'data/'
eval_path = 'eval/'

train_datagen = ImageDataGenerator(rescale=1./255,
                                   shear_range=0.2,
                                   zoom_range=0.2,
                                   horizontal_flip=True)

valid_datagen = ImageDataGenerator(rescale=1./255,
                                   shear_range=0.2,
                                   zoom_range=0.2,
                                   horizontal_flip=True)

train_generator = train_datagen.flow_from_directory(
                        train_path,
                        target_size=(image_size,image_size),
                        batch_size=batch_size,
                        class_mode='sparse',
                        color_mode='rgb')

valid_generator = valid_datagen.flow_from_directory(
    directory=eval_path,
    target_size=(224, 224),
    color_mode='rgb',
    batch_size=batch_size,
    class_mode='sparse',
    shuffle=True,
)

Utbilda vรฅr modell

Lรฅt oss bรถrja vรฅr trรคningsprocess genom att sammanstรคlla vรฅrt nรคtverk med fรถrlustfunktion och optimerare. Hรคr anvรคnder vi sparse_categorical_crossentropy som vรฅr fรถrlustfunktion, med hjรคlp av SGD som vรฅr inlรคrningsoptimerare.

from keras.optimizers import SGD

custom_face.compile(loss='sparse_categorical_crossentropy',
                         optimizer=SGD(lr=1e-4, momentum=0.9),
                         metrics=['accuracy'])

history = custom_face.fit_generator(
        train_generator,
        validation_data=valid_generator,
        steps_per_epoch=49/batch_size,
        validation_steps=valid_generator.n,
        epochs=50)

custom_face.evaluate_generator(generator=valid_generator)
        
custom_face.save('vgg_face.h5')
Epoch 25/50
10/9 [==============================] - 60s 6s/step - loss: 1.4882 - acc: 0.8998 - val_loss: 1.5659 - val_acc: 0.5851
Epoch 26/50
10/9 [==============================] - 59s 6s/step - loss: 1.4882 - acc: 0.8998 - val_loss: 1.5638 - val_acc: 0.5809
Epoch 27/50
10/9 [==============================] - 60s 6s/step - loss: 1.4779 - acc: 0.8597 - val_loss: 1.5613 - val_acc: 0.5477
Epoch 28/50
10/9 [==============================] - 60s 6s/step - loss: 1.4755 - acc: 0.9199 - val_loss: 1.5576 - val_acc: 0.5809
Epoch 29/50
10/9 [==============================] - 60s 6s/step - loss: 1.4794 - acc: 0.9153 - val_loss: 1.5531 - val_acc: 0.5892
Epoch 30/50
10/9 [==============================] - 60s 6s/step - loss: 1.4714 - acc: 0.8953 - val_loss: 1.5510 - val_acc: 0.6017
Epoch 31/50
10/9 [==============================] - 60s 6s/step - loss: 1.4552 - acc: 0.9199 - val_loss: 1.5509 - val_acc: 0.5809
Epoch 32/50
10/9 [==============================] - 60s 6s/step - loss: 1.4504 - acc: 0.9199 - val_loss: 1.5492 - val_acc: 0.5975
Epoch 33/50
10/9 [==============================] - 60s 6s/step - loss: 1.4497 - acc: 0.8998 - val_loss: 1.5490 - val_acc: 0.5851
Epoch 34/50
10/9 [==============================] - 60s 6s/step - loss: 1.4453 - acc: 0.9399 - val_loss: 1.5529 - val_acc: 0.5643
Epoch 35/50
10/9 [==============================] - 60s 6s/step - loss: 1.4399 - acc: 0.9599 - val_loss: 1.5451 - val_acc: 0.5768
Epoch 36/50
10/9 [==============================] - 60s 6s/step - loss: 1.4373 - acc: 0.8998 - val_loss: 1.5424 - val_acc: 0.5768
Epoch 37/50
10/9 [==============================] - 60s 6s/step - loss: 1.4231 - acc: 0.9199 - val_loss: 1.5389 - val_acc: 0.6183
Epoch 38/50
10/9 [==============================] - 59s 6s/step - loss: 1.4247 - acc: 0.9199 - val_loss: 1.5372 - val_acc: 0.5934
Epoch 39/50
10/9 [==============================] - 60s 6s/step - loss: 1.4153 - acc: 0.9399 - val_loss: 1.5406 - val_acc: 0.5560
Epoch 40/50
10/9 [==============================] - 60s 6s/step - loss: 1.4074 - acc: 0.9800 - val_loss: 1.5327 - val_acc: 0.6224
Epoch 41/50
10/9 [==============================] - 60s 6s/step - loss: 1.4023 - acc: 0.9800 - val_loss: 1.5305 - val_acc: 0.6100
Epoch 42/50
10/9 [==============================] - 59s 6s/step - loss: 1.3938 - acc: 0.9800 - val_loss: 1.5269 - val_acc: 0.5975
Epoch 43/50
10/9 [==============================] - 60s 6s/step - loss: 1.3897 - acc: 0.9599 - val_loss: 1.5234 - val_acc: 0.6432
Epoch 44/50
10/9 [==============================] - 60s 6s/step - loss: 1.3828 - acc: 0.9800 - val_loss: 1.5210 - val_acc: 0.6556
Epoch 45/50
10/9 [==============================] - 59s 6s/step - loss: 1.3848 - acc: 0.9599 - val_loss: 1.5234 - val_acc: 0.5975
Epoch 46/50
10/9 [==============================] - 60s 6s/step - loss: 1.3716 - acc: 0.9800 - val_loss: 1.5216 - val_acc: 0.6432
Epoch 47/50
10/9 [==============================] - 60s 6s/step - loss: 1.3721 - acc: 0.9800 - val_loss: 1.5195 - val_acc: 0.6266
Epoch 48/50
10/9 [==============================] - 60s 6s/step - loss: 1.3622 - acc: 0.9599 - val_loss: 1.5108 - val_acc: 0.6141
Epoch 49/50
10/9 [==============================] - 60s 6s/step - loss: 1.3452 - acc: 0.9399 - val_loss: 1.5140 - val_acc: 0.6432
Epoch 50/50
10/9 [==============================] - 60s 6s/step - loss: 1.3387 - acc: 0.9599 - val_loss: 1.5100 - val_acc: 0.6266

Som du kan se รคr vรฅr valideringsnoggrannhet upp till 64%, detta รคr ett bra resultat fรถr en liten mรคngd trรคningsdata. Vi kan fรถrbรคttra detta genom att lรคgga till fler lager eller lรคgga till fler trรคningsbilder sรฅ att vรฅr modell kan lรคra sig mer om ansiktena och uppnรฅ stรถrre noggrannhet.

Lรฅt oss testa vรฅr modell med en testbild

Testbild

from keras.models import load_model
from keras.preprocessing.image import load_img, save_img, img_to_array
from keras_vggface.utils import preprocess_input

test_img = image.load_img('test.jpg', target_size=(224, 224))
img_test = image.img_to_array(test_img)
img_test = np.expand_dims(img_test, axis=0)
img_test = utils.preprocess_input(img_test)
predictions = model.predict(img_test)
predicted_class=np.argmax(predictions,axis=1)

labels = (train_generator.class_indices)
labels = dict((v,k) for k,v in labels.items())
predictions = [labels[k] for k in predicted_class]
print(predictions)
['RobertDJr']

med Robert Downey Jr.-bild som vรฅr testbild visar det att det fรถrutspรฅdda ansiktet รคr sant!

Fรถrutsรคgelse med Live Cam!

Vad sรคgs om om vi testar vรฅr skicklighet med att implementera det med indata frรฅn en webbkamera? Genom att anvรคnda OpenCV med Haar Face cascade fรถr att hitta vรฅrt ansikte och med hjรคlp av vรฅr nรคtverksmodell kan vi kรคnna igen personen.

Det fรถrsta steget รคr att fรถrbereda dig och din vรคns ansikten. Ju mer data vi har dรฅ desto bรคttre blir resultatet!

Fรถrbered och trรคna ditt nรคtverk som fรถregรฅende steg, efter att trรคningen รคr klar, lรคgg till den hรคr raden fรถr att fรฅ ingรฅngsbilden frรฅn cam

#Load trained model
from keras.models import load_model
from keras_vggface import utils
import cv2

image_size = 224
device_id = 0 #camera_device id 

model = load_model('my faces.h5')

#make labels according to your dataset folder 
labels = dict(fisrtname=0,secondname=1) #and so on
print(labels)

cascade_classifier = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
camera = cv2.VideoCapture(device_id)

while camera.isOpened():
    ok, cam_frame = camera.read()
    if not ok:
        break
    
    gray_img=cv2.cvtColor(cam_frame, cv2.COLOR_BGR2GRAY)
    faces= cascade_classifier.detectMultiScale(gray_img, minNeighbors=5)

    for (x,y,w,h) in faces:
        cv2.rectangle(cam_frame,(x,y),(x+w,y+h),(255,255,0),2)
        roi_color = cam_frame [y:y+h, x:x+w]
        roi color = cv2.cvtColor(roi_color, cv2.COLOR_BGR2RGB)
        roi_color = cv2.resize(roi_color, (image_size, image_size))
        image = roi_color.astype(np.float32, copy=False)
        image = np.expand_dims(image, axis=0)
        image = preprocess_input(image, version=1) # or version=2
        preds = model.predict(image)
        predicted_class=np.argmax(preds,axis=1)

        labels = dict((v,k) for k,v in labels.items())
        name = [labels[k] for k in predicted_class]

        cv2.putText(cam_frame,str(name), 
                    (x + 10, y + 10), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,0,255), 2)
        
    cv2.imshow('video image', cam_frame)
    key = cv2.waitKey(30)
    if key == 27: # press 'ESC' to quit
        break

camera.release()
cv2.destroyAllWindows()

Vilken รคr bรคttre? Keras eller Tensorflow

Keras erbjuder enkelhet nรคr du skriver manuset. Vi kan bรถrja skriva och fรถrstรฅ direkt med Keras eftersom det inte รคr sรฅ svรฅrt att fรถrstรฅ. Det รคr mer anvรคndarvรคnligt och enkelt att implementera, du behรถver inte gรถra mรฅnga variabler fรถr att kรถra modellen. Sรฅ vi behรถver inte fรถrstรฅ varje detalj i backend-processen.

ร… andra sidan รคr Tensorflow operationerna pรฅ lรฅg nivรฅ som erbjuder flexibilitet och avancerade operationer om du vill gรถra en godtycklig berรคkningsgraf eller modell. Tensorflow kan ocksรฅ visualisera processen med hjรคlp av TensorBoard och ett specialiserat felsรถkningsverktyg.

Sรฅ om du vill bรถrja arbeta med djupinlรคrning med inte sรฅ mycket komplexitet, anvรคnd Keras. Eftersom Keras erbjuder enkelhet och anvรคndarvรคnlig att anvรคnda och lรคtt att implementera รคn Tensorflow. Men om du vill skriva din egen algoritm i djupinlรคrningsprojekt eller forskning bรถr du istรคllet anvรคnda Tensorflow.

Sammanfattning

Sรฅ lรฅt oss sammanfatta allt vi har diskuterat och gjort i denna handledning.

  • Keras i ett hรถgnivรฅ-API som anvรคnds fรถr att gรถra djupinlรคrningsnรคtverk enklare med hjรคlp av backend-motorn.
  • Keras รคr lรคtt att anvรคnda och fรถrstรฅ med python-stรถd sรฅ det kรคnns mer naturligt รคn nรฅgonsin. Det รคr bra fรถr nybรถrjare som vill lรคra sig om djupinlรคrning och fรถr forskare som vill ha lรคttanvรคnd API.
  • Installationsprocessen รคr enkel och du kan anvรคnda en virtuell miljรถ eller anvรคnda en extern plattform som t.ex AWS.
  • Keras kommer ocksรฅ med olika typer av nรคtverksmodeller sรฅ det gรถr oss lรคttare att anvรคnda den tillgรคngliga modellen fรถr att fรถrtrรคna och finjustera vรฅr egen nรคtverksmodell.
  • Det finns ocksรฅ mรฅnga handledningar och artiklar om hur man anvรคnder Keras frรฅn gemenskaper รถver hela vรคrlden fรถr djupinlรคrningsรคndamรฅl.

Sammanfatta detta inlรคgg med: