Tutorial Keras

Ce este Keras?

Keras este o bibliotecฤƒ Open Source Neural Network scrisฤƒ รฎn Python care ruleazฤƒ deasupra Theano sau Tensorflow. Este conceput pentru a fi modular, rapid ศ™i uศ™or de utilizat. A fost dezvoltat de Franรงois Chollet, un inginer Google. Keras nu se ocupฤƒ de calculul de nivel scฤƒzut. รŽn schimb, foloseศ™te o altฤƒ bibliotecฤƒ pentru a face acest lucru, numitฤƒ โ€žBackend.

Keras este un pachet API de nivel รฎnalt pentru API-ul de nivel scฤƒzut, capabil sฤƒ ruleze pe TensorFlow, CNTK sau Theano. Keras High-Level API gestioneazฤƒ modul รฎn care realizฤƒm modele, definim straturi sau setฤƒm mai multe modele de intrare-ieศ™ire. La acest nivel, Keras alcฤƒtuieศ™te ศ™i modelul nostru cu funcศ›ii de pierdere ศ™i optimizare, proces de antrenament cu funcศ›ie de fit. Keras รฎn Python nu se ocupฤƒ de API de nivel scฤƒzut, cum ar fi realizarea graficului de calcul, realizarea de tensori sau alte variabile, deoarece a fost gestionatฤƒ de motorul โ€žbackendโ€.

Ce este un backend?

Backend este un termen รฎn Keras care efectueazฤƒ toate calculele de nivel scฤƒzut, cum ar fi produsele tensor, convoluศ›iile ศ™i multe alte lucruri, cu ajutorul altor biblioteci, cum ar fi Tensorflow sau Theano. Deci, โ€žmotorul backendโ€ va efectua calculul ศ™i dezvoltarea modelelor. Tensorflow este โ€žmotorul de backendโ€ implicit, dar รฎl putem schimba รฎn configuraศ›ie.

Theano, Tensorflow ศ™i CNTK Backend

Backend-ul lui Theano

Theano este un proiect open source care a fost dezvoltat de grupul MILA de la Universitatea din Montreal, Quebec, Canada. A fost primul cadru utilizat pe scarฤƒ largฤƒ. Este o Python bibliotecฤƒ care ajutฤƒ รฎn tablourile multidimensionale pentru operaศ›ii matematice folosind Numpy sau Scipy. Theano poate folosi GPU-uri pentru calcule mai rapide, de asemenea, poate construi automat grafice simbolice pentru calcularea gradienศ›ilor. Pe site-ul sฤƒu, Theano susศ›ine cฤƒ poate recunoaศ™te expresii instabile numeric ศ™i le poate calcula cu algoritmi mai stabili, acest lucru este foarte util pentru expresiile noastre instabile.

Backend-ul TensorFlow

Pe de altฤƒ parte, Tensorflow este steaua รฎn ascensiune รฎn cadrul de deep learning. Dezvoltat de echipa Google Brain, este cel mai popular instrument de รฎnvฤƒศ›are profundฤƒ. Cu o mulศ›ime de caracteristici, iar cercetฤƒtorii contribuie la dezvoltarea acestui cadru รฎn scopuri de รฎnvฤƒศ›are profundฤƒ.

Backend-ul CNTK

Un alt motor de backend pentru Keras este The Microsoft Setul de instrumente cognitive sau CNTK. Este un cadru de รฎnvฤƒศ›are profundฤƒ open-source care a fost dezvoltat de Microsoft Echipฤƒ. Poate rula pe mai multe GPU-uri sau pe mai multe maศ™ini pentru antrenamentul modelului de รฎnvฤƒศ›are profundฤƒ la scarฤƒ masivฤƒ. รŽn unele cazuri, CNTK a fost raportat mai rapid decรขt alte cadre precum Tensorflow sau Theano. รŽn continuare, รฎn acest tutorial Keras CNN, vom compara backend-urile Theano, TensorFlow ศ™i CNTK.

Compararea backend-urilor

Trebuie sฤƒ facem un benchmark pentru a cunoaศ™te comparaศ›ia dintre aceste douฤƒ backend-uri. Dupฤƒ cum puteศ›i vedea รฎn Reperul lui Jeong-Yoon Lee, se comparฤƒ performanศ›a a 3 backend-uri diferite pe hardware diferit. ศ˜i rezultatul este cฤƒ Theano este mai lent decรขt celฤƒlalt backend, se spune 50 ori mai lent, dar precizia este aproape una de alta.

O alta test de referinศ›ฤƒ este realizat de Jasmeet Bhatia. El a raportat cฤƒ Theano este mai lent decรขt Tensorflow pentru unele teste. Dar precizia generalฤƒ este aproape aceeaศ™i pentru fiecare reศ›ea care a fost testatฤƒ.

Deci, รฎntre Theano, Tensorflow ศ™i CTK este evident cฤƒ TensorFlow este mai bun decรขt Theano. Cu TensorFlow, timpul de calcul este mult mai scurt, iar CNN este mai bun decรขt celelalte.

Urmฤƒtorul รฎn acest Keras Python tutorial, vom afla despre diferenศ›a dintre Keras ศ™i TensorFlow (Keras vs Tensorflow).

Keras vs Tensorflow

parametrii Keras flux tensor
Tip Wrapper API de nivel รฎnalt API de nivel scฤƒzut
Complexitate Uศ™or de utilizat dacฤƒ dvs Python limbฤƒ Trebuie sฤƒ รฎnvฤƒศ›aศ›i sintaxa utilizฤƒrii uneia dintre funcศ›iile Tensorflow
Scop Implementare rapidฤƒ pentru realizarea modelelor cu straturi standard Vฤƒ permite sฤƒ realizaศ›i un grafic de calcul arbitrar sau straturi de model
Instrumente Utilizeazฤƒ alt instrument de depanare API, cum ar fi TFDBG Puteศ›i utiliza instrumentele de vizualizare Tensorboard
Comunitate Comunitฤƒศ›i mari active Comunitฤƒศ›i mari active ศ™i resurse partajate pe scarฤƒ largฤƒ

Avantajele Keras

Implementare rapidฤƒ ศ™i uศ™or de รฎnศ›eles

Keras este foarte rapid sฤƒ realizeze un model de reศ›ea. Dacฤƒ doriศ›i sฤƒ faceศ›i un model de reศ›ea simplu cu cรขteva linii, Python Keras te poate ajuta cu asta. Uitฤƒ-te la exemplul Keras de mai jos:

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'))

Datoritฤƒ API-ului prietenos, putem รฎnศ›elege cu uศ™urinศ›ฤƒ procesul. Scrierea codului cu o funcศ›ie simplฤƒ ศ™i nu este nevoie sฤƒ setaศ›i mai mulศ›i parametri.

Sprijin comunitar mare

Existฤƒ o mulศ›ime de comunitฤƒศ›i AI care folosesc Keras pentru cadrul lor de Deep Learning. Mulศ›i dintre ei รฎศ™i publicฤƒ codurile ศ™i tutorialele pentru publicul larg.

Aveศ›i mai multe backend-uri

Puteศ›i alege Tensorflow, CNTK ศ™i Theano ca backend cu Keras. Puteศ›i alege un backend diferit pentru diferite proiecte, รฎn funcศ›ie de nevoile dvs. Fiecare backend are propriul sฤƒu avantaj unic.

Implementare multi-platformฤƒ ศ™i uศ™oarฤƒ a modelului

Cu o varietate de dispozitive ศ™i platforme acceptate, puteศ›i implementa Keras pe orice dispozitiv

  • iOS cu CoreML
  • Android cu Tensorflow Android,
  • Browser web cu suport .js
  • Motor cloud
  • Raspberry Pi

Suport pentru mai multe GPU

Puteศ›i antrena Keras pe un singur GPU sau puteศ›i utiliza mai multe GPU-uri simultan. Deoarece Keras are un suport รฎncorporat pentru paralelismul datelor, astfel รฎncรขt sฤƒ poatฤƒ procesa volume mari de date ศ™i sฤƒ accelereze timpul necesar antrenฤƒrii acestora.

Dezavantajele Keras

Nu se poate gestiona API-ul de nivel scฤƒzut

Keras se ocupฤƒ doar de API-uri de nivel รฎnalt care ruleazฤƒ pe alt framework sau motor de backend, cum ar fi Tensorflow, Theano sau CNTK. Deci nu este foarte util dacฤƒ doriศ›i sฤƒ vฤƒ faceศ›i propriul strat abstract รฎn scopuri de cercetare, deoarece Keras are deja straturi preconfigurate.

Instalarea Keras

รŽn aceastฤƒ secศ›iune, vom analiza diferite metode disponibile pentru a instala Keras

Instalare directฤƒ sau Mediu virtual

Care este mai bun? Instalare directฤƒ pe python-ul actual sau folosirea unui mediu virtual? Vฤƒ sugerez sฤƒ folosiศ›i un mediu virtual dacฤƒ aveศ›i multe proiecte. Vrei sฤƒ ศ™tii de ce? Acest lucru se datoreazฤƒ faptului cฤƒ diferite proiecte pot utiliza o versiune diferitฤƒ a unei biblioteci keras.

De exemplu, am un proiect care are nevoie Python 3.5 folosind OpenCV 3.3 cu backend mai vechi Keras-Theano, dar รฎn celฤƒlalt proiect trebuie sฤƒ folosesc Keras cu cea mai recentฤƒ versiune ศ™i un Tensorflow ca backend cu Python Suport 3.6.6

Nu vrem ca biblioteca Keras sฤƒ intre รฎn conflict una cu cealaltฤƒ, nu? Aศ™adar, folosim un mediu virtual pentru a localiza proiectul cu un anumit tip de bibliotecฤƒ sau putem folosi o altฤƒ platformฤƒ, cum ar fi Cloud Service, pentru a ne face calculele pentru noi, cum ar fi Amazon Serviciu web.

Instalarea Keras pe Amazon Serviciu web (AWS)

Amazon Serviciul Web este o platformฤƒ care oferฤƒ servicii ศ™i produse Cloud Computing pentru cercetฤƒtori sau orice alte scopuri. AWS รฎศ™i รฎnchiriazฤƒ hardware-ul, reศ›elele, baza de date etc., astfel รฎncรขt sฤƒ le putem folosi direct de pe internet. Unul dintre serviciile AWS populare pentru scopul รฎnvฤƒศ›ฤƒrii profunde este Amazon Machine Image Deep Learning Service sau DL

Pentru instrucศ›iuni detaliate despre cum sฤƒ utilizaศ›i AWS, consultaศ›i aceasta tutorial

Notฤƒ despre AMI: veศ›i avea disponibil urmฤƒtorul AMI

Instalarea Keras pe AWS

AWS Deep Learning AMI este un mediu virtual din AWS EC2 Service care ajutฤƒ cercetฤƒtorii sau practicienii sฤƒ lucreze cu Deep Learning. DLAMI oferฤƒ de la motoare cu procesoare mici pรขnฤƒ la motoare cu mai multe GPU-uri de mare putere cu CUDA, cuDNN preconfigurate ศ™i vine cu o varietate de cadre de รฎnvฤƒศ›are profundฤƒ.

Dacฤƒ doriศ›i sฤƒ รฎl utilizaศ›i instantaneu, ar trebui sฤƒ alegeศ›i Deep Learning AMI deoarece vine preinstalat cu cadre populare de รฎnvฤƒศ›are profundฤƒ.

Dar dacฤƒ doriศ›i sฤƒ รฎncercaศ›i un cadru de deep learning personalizat pentru cercetare, ar trebui sฤƒ instalaศ›i Deep Learning Base AMI, deoarece vine cu biblioteci fundamentale, cum ar fi CUDA, cuDNN, drivere GPU ศ™i alte biblioteci necesare pentru a rula cu mediul dvs. de deep learning.

Cum se instaleazฤƒ Keras pe Amazon SageMaker

Amazon SageMaker este o platformฤƒ de รฎnvฤƒศ›are profundฤƒ care vฤƒ ajutฤƒ sฤƒ antrenaศ›i ศ™i sฤƒ implementaศ›i reศ›eaua de รฎnvฤƒศ›are profundฤƒ cu cel mai bun algoritm.

Ca รฎncepฤƒtor, aceasta este de departe cea mai uศ™oarฤƒ metodฤƒ de a folosi Keras. Mai jos este un proces despre cum sฤƒ instalaศ›i Keras Amazon SageMaker:

Pasul 1) Deschideศ›i Amazon SageMaker

รŽn primul pas, deschideศ›i Amazon Sagemaker console ศ™i faceศ›i clic pe Creare instanศ›ฤƒ de notebook.

Instalaศ›i Keras pe Amazon SageMaker

Pasul 2) Introduceศ›i detaliile

  1. Introduceศ›i numele blocnotesului dvs.
  2. Creaศ›i un rol IAM. Va crea un rol AMI Amazon Rolul IAM รฎn formatul de AmazonSageMaker-Executionrole-AAAAMMZZ|HHmmSS.
  3. รŽn cele din urmฤƒ, alegeศ›i Creare instanศ›ฤƒ de blocnotes. Dupฤƒ cรขteva clipe, Amazon Sagemaker lanseazฤƒ o instanศ›ฤƒ de notebook.

Instalaศ›i Keras pe Amazon SageMaker

notiศ›e: Dacฤƒ doriศ›i sฤƒ accesaศ›i resurse de la VPC-ul dvs., setaศ›i accesul direct la internet ca fiind activat. รŽn caz contrar, aceastฤƒ instanศ›ฤƒ de notebook nu va avea acces la internet, aศ™a cฤƒ este imposibil sฤƒ antrenezi sau sฤƒ gฤƒzduieศ™ti modele

Pasul 3) Lansaศ›i instanศ›a

Faceศ›i clic pe Deschidere pentru a lansa instanศ›a

Instalaศ›i Keras pe Amazon SageMaker

Pasul 4) รŽncepeศ›i codarea

In Jupyter, Faceศ›i clic pe New> conda_tensorflow_p36 ศ™i sunteศ›i gata sฤƒ codificaศ›i

Instalaศ›i Keras pe Amazon SageMaker

Instalaศ›i Keras รฎn Linux

Pentru a activa Keras cu Tensorflow ca motor backend, trebuie sฤƒ instalฤƒm mai รฎntรขi Tensorflow. Rulaศ›i aceastฤƒ comandฤƒ pentru a instala tensorflow cu CPU (fฤƒrฤƒ GPU)

pip install --upgrade tensorflow

dacฤƒ doriศ›i sฤƒ activaศ›i suportul GPU pentru tensorflow, puteศ›i utiliza aceastฤƒ comandฤƒ

pip install --upgrade tensorflow-gpu

Instalaศ›i Keras pe Linux

hai sa ne verificam Python pentru a vedea dacฤƒ instalarea noastrฤƒ a reuศ™it tastรขnd

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
>>>

dacฤƒ nu existฤƒ niciun mesaj de eroare, procesul de instalare este reuศ™it

Instalaศ›i Keras

Dupฤƒ ce instalฤƒm Tensorflow, sฤƒ รฎncepem sฤƒ instalฤƒm keras. Tastaศ›i aceastฤƒ comandฤƒ รฎn terminal

pip install keras

va รฎncepe sฤƒ instaleze Keras ศ™i, de asemenea, toate dependenศ›ele sale. Ar trebui sฤƒ vedeศ›i ceva de genul acesta:

Instalaศ›i Keras

Acum avem Keras instalat รฎn sistemul nostru!

verificarea

รŽnainte de a รฎncepe sฤƒ folosim Keras, ar trebui sฤƒ verificฤƒm dacฤƒ Keras-ul nostru foloseศ™te Tensorflow ca backend prin deschiderea fiศ™ierului de configurare:

gedit ~/.keras/keras.json

ar trebui sa vezi asa ceva

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

dupฤƒ cum puteศ›i vedea, โ€žbackend-ulโ€ foloseศ™te tensorflow. รŽnseamnฤƒ cฤƒ Keras utilizeazฤƒ Tensorflow ca backend aศ™a cum ne aศ™teptam

ศ™i acum rulaศ›i-l pe terminal tastรขnd

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.
>>> 

Cum se instaleazฤƒ Keras pe Windows

รŽnainte de a instala flux tensor ศ™i Keras, ar trebui sฤƒ instalฤƒm Python, pip ศ™i virtualenv. Dacฤƒ aศ›i instalat deja aceste biblioteci, ar trebui sฤƒ continuaศ›i cu pasul urmฤƒtor, altfel procedaศ›i astfel:

Instalare Python 3 prin descฤƒrcarea de pe aceasta legฤƒturฤƒ

Instalaศ›i pip rulรขnd acest

Instalaศ›i virtualenv cu aceastฤƒ comandฤƒ

pip3 install โ€“U pip virtualenv

Instalare Microsoft Vizual C++ Actualizarea redistribuibilฤƒ din 2015 3

Apoi rulaศ›i acest script

pip3 install virtualenv

Configuraศ›i mediul virtual

Acesta este folosit pentru a izola sistemul de lucru cu sistemul principal.

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

Activaศ›i mediul

.\venv\Scripts\activate

Dupฤƒ pregฤƒtirea mediului, instalarea Tensorflow ศ™i Keras rฤƒmรขne aceeaศ™i ca Linux. รŽn continuare, รฎn acest tutorial Deep learning with Keras, vom afla despre elementele fundamentale Keras pentru Deep learning.

Fundamentele Keras pentru รฎnvฤƒศ›area profundฤƒ

Structura principalฤƒ din Keras este Modelul care defineศ™te graficul complet al unei reศ›ele. Puteศ›i adฤƒuga mai multe straturi la un model existent pentru a construi un model personalizat de care aveศ›i nevoie pentru proiectul dvs.

Iatฤƒ cum sฤƒ creaศ›i un model secvenลฃial ศ™i cรขteva straturi utilizate รฎn mod obiศ™nuit รฎn deep learning

1. Model secvenลฃial

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

model = Sequential()

2. Stratul convoluศ›ional

Acesta este un Keras Python exemplu de strat convoluศ›ional ca strat de intrare cu forma de intrare de 320x320x3, cu 48 de filtre de dimensiune 3ร—3 ศ™i foloseศ™te ReLU ca funcศ›ie de activare.

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))

alt tip este

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

3.MaxPooling Strat

Pentru a reduce eศ™antionarea reprezentฤƒrii de intrare, utilizaศ›i MaxPool2d ศ™i specificaศ›i dimensiunea nucleului

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

4. Strat dens

adฤƒugarea unui strat complet conectat cu doar specificarea dimensiunii de ieศ™ire

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

5. Stratul de abandon

Adฤƒugarea unui strat de abandon cu 50% probabilitate

model.add(Dropout(0.5))

Compilarea, instruirea ศ™i evaluarea

Dupฤƒ ce ne definim modelul, sฤƒ รฎncepem sฤƒ-i antrenฤƒm. Este necesar sฤƒ compilaศ›i mai รฎntรขi reศ›eaua cu funcศ›ia de pierdere ศ™i funcศ›ia de optimizare. Acest lucru va permite reศ›elei sฤƒ schimbe greutฤƒศ›ile ศ™i sฤƒ minimizeze pierderea.

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

Acum, pentru a รฎncepe antrenamentul, utilizaศ›i fit pentru a furniza datele de antrenament ศ™i validare la model. Acest lucru vฤƒ va permite sฤƒ antrenaศ›i reศ›eaua รฎn loturi ศ™i sฤƒ setaศ›i epocile.

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

Pasul nostru final este sฤƒ evaluฤƒm modelul cu datele de testare.

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

Sฤƒ รฎncercฤƒm sฤƒ folosim regresia liniarฤƒ simplฤƒ

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()

Dupฤƒ antrenamentul datelor, rezultatul ar trebui sฤƒ arate astfel

linear Regression

cu greutatea initiala

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

si greutatea finala

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

Ajustaศ›i modelele pre-antrenate รฎn Keras ศ™i cum sฤƒ le utilizaศ›i

De ce folosim Fine Tune Models ศ™i cรขnd le folosim

Reglarea finฤƒ este o sarcinฤƒ de a modifica un model pre-antrenat, astfel รฎncรขt parametrii sฤƒ se adapteze la noul model. Cรขnd vrem sฤƒ ne antrenฤƒm de la zero pe un model nou, avem nevoie de o cantitate mare de date, astfel รฎncรขt reศ›eaua sฤƒ poatฤƒ gฤƒsi toศ›i parametrii. Dar รฎn acest caz, vom folosi un model pre-antrenat, astfel รฎncรขt parametrii sunt deja รฎnvฤƒศ›aศ›i ศ™i au o greutate.

De exemplu, dacฤƒ dorim sฤƒ ne antrenฤƒm propriul model Keras pentru a rezolva o problemฤƒ de clasificare, dar avem doar o cantitate micฤƒ de date, atunci putem rezolva acest lucru folosind o Transferul รฎnvฤƒศ›ฤƒrii + Metoda de reglare finฤƒ.

Folosind o reศ›ea pre-antrenatฤƒ ศ™i greutฤƒศ›i, nu trebuie sฤƒ antrenฤƒm รฎntreaga reศ›ea. Trebuie doar sฤƒ antrenฤƒm ultimul strat care este folosit pentru a ne rezolva sarcina, aศ™a cum o numim metoda de reglare finฤƒ.

Pregฤƒtirea modelului de reศ›ea

Pentru modelul pre-antrenat, putem รฎncฤƒrca o varietate de modele pe care Keras le are deja รฎn biblioteca sa, cum ar fi:

  • VGG16
  • InceptionV3
  • ResNet
  • MobileNet
  • Xception
  • InceptionResNetV2

Dar รฎn acest proces, vom folosi modelul de reศ›ea VGG16 ศ™i imageNet ca greutate pentru model. Vom ajusta o reศ›ea pentru a clasifica 8 tipuri diferite de clase folosind Imagini din Kaggle Natural Images Dataset

Arhitectura modelului VGG16

Arhitectura modelului VGG16

sursฤƒ

รŽncฤƒrcarea datelor noastre รฎn AWS S3 Bucket

Pentru procesul nostru de antrenament, vom folosi o imagine cu imagini naturale din 8 clase diferite, cum ar fi avioane, maศ™inฤƒ, pisicฤƒ, cรขine, floare, fructe, motocicletฤƒ ศ™i persoanฤƒ. รŽn primul rรขnd, trebuie sฤƒ ne รฎncฤƒrcฤƒm datele รฎn Amazon Gฤƒleatฤƒ S3.

Amazon Gฤƒleatฤƒ S3

Pas 1) Dupฤƒ ce v-aศ›i conectat la contul dvs. S3, sฤƒ creฤƒm o gฤƒleatฤƒ prin ceas Creaศ›i o gฤƒleatฤƒ

รŽncฤƒrcarea datelor รฎn AWS S3 Bucket

Pas 2) Acum alegeศ›i un nume de grup ศ™i regiunea dvs. รฎn funcศ›ie de contul dvs. Asiguraศ›i-vฤƒ cฤƒ numele compartimentului este disponibil. Dupฤƒ acel clic Crea.

รŽncฤƒrcarea datelor รฎn AWS S3 Bucket

Pas 3) Dupฤƒ cum puteศ›i vedea, Bucket-ul dvs. este gata de utilizare. Dar, dupฤƒ cum puteศ›i vedea, Accesul nu este public, este bine pentru dvs. dacฤƒ doriศ›i sฤƒ รฎl pฤƒstraศ›i privat pentru dvs. Puteศ›i schimba acest compartiment pentru acces public รฎn Proprietฤƒศ›i compartiment

รŽncฤƒrcarea datelor รฎn AWS S3 Bucket

Pas 4) Acum รฎncepeศ›i sฤƒ รฎncฤƒrcaศ›i datele de antrenament รฎn Bucket. Aici voi รฎncฤƒrca fiศ™ierul tar.gz care constฤƒ รฎn imagini pentru procesul de instruire ศ™i testare.

รŽncฤƒrcarea datelor รฎn AWS S3 Bucket

Pas 5) Acum faceศ›i clic pe fiศ™ierul dvs. ศ™i copiaศ›i Link ca sฤƒ-l putem descฤƒrca.

รŽncฤƒrcarea datelor รฎn AWS S3 Bucket

Pregฤƒtirea datelor

Trebuie sฤƒ generฤƒm datele noastre de antrenament folosind Keras ImageDataGenerator.

Mai รฎntรขi trebuie sฤƒ descฤƒrcaศ›i folosind wget cu linkul cฤƒtre fiศ™ierul dvs. din S3 Bucket.

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

Dupฤƒ ce descฤƒrcaศ›i datele, sฤƒ รฎncepem Procesul de Formare.

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)

ImageDataGenerator va face un X_training date dintr-un director. Subdirectorul din acel director va fi folosit ca o clasฤƒ pentru fiecare obiect. Imaginea va fi รฎncฤƒrcatฤƒ cu modul de culoare RGB, cu modul de clasฤƒ categorialฤƒ pentru datele Y_training, cu o dimensiune a lotului de 16. รŽn cele din urmฤƒ, amestecaศ›i datele.

Sฤƒ vedem imaginile noastre aleatoriu prin trasarea lor cu 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()

Pregฤƒtirea datelor

Dupฤƒ aceea, sฤƒ creฤƒm modelul nostru de reศ›ea din VGG16 cu greutatea pre-antrenatฤƒ imageNet. Vom รฎngheศ›a aceste straturi, astfel รฎncรขt straturile sฤƒ nu poatฤƒ fi antrenate pentru a ne ajuta sฤƒ reducem timpul de calcul.

Crearea modelului nostru din 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())

Dupฤƒ cum puteศ›i vedea mai jos, rezumatul modelului nostru de reศ›ea. Dintr-o intrare de la Straturi VGG16, apoi adฤƒugฤƒm 2 Straturi Fully Connected care vor extrage 1024 de caracteristici ศ™i un strat de ieศ™ire care va calcula cele 8 clase cu activarea softmax.

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

Pregฤƒtire

# # 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()

REZULTATE

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

Pregฤƒtire

Dupฤƒ cum puteศ›i vedea, pierderile noastre sunt reduse semnificativ, iar acurateศ›ea este de aproape 100%. Pentru a testa modelul nostru, am ales aleatoriu imagini de pe internet ศ™i le-am pus รฎn folderul de testare cu o clasฤƒ diferitฤƒ de testat

Testarea modelului nostru

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()

ศ˜i testul nostru este aศ™a cum este prezentat mai jos! Doar 1 imagine este prezisฤƒ greศ™it dintr-un test de 14 imagini!

Model de testare

Reศ›ea neuronalฤƒ de recunoaศ™tere a feศ›ei cu Keras

De ce avem nevoie de recunoaศ™tere

Avem nevoie de Recunoaศ™tere pentru a ne face mai uศ™or sฤƒ recunoaศ™tem sau sฤƒ identificฤƒm faศ›a unei persoane, tipul de obiecte, vรขrsta estimatฤƒ a unei persoane de pe faศ›a sa sau chiar sฤƒ cunoaศ™tem expresiile faciale ale acelei persoane.

Reศ›ea neuronalฤƒ de recunoaศ™tere a feศ›ei cu Keras

Poate รฎศ›i dai seama de fiecare datฤƒ cรขnd รฎncerci sฤƒ marchezi chipul prietenului tฤƒu รฎntr-o fotografie, funcศ›ia din Facebook a fฤƒcut-o pentru tine, adicฤƒ marcheazฤƒ faศ›a prietenului tฤƒu fฤƒrฤƒ sฤƒ fii nevoie sฤƒ-l marchezi mai รฎntรขi. Aceasta este recunoaศ™terea facialฤƒ aplicatฤƒ de Facebook pentru a ne facilita etichetarea prietenilor.

Deci cum funcศ›ioneazฤƒ? De fiecare datฤƒ cรขnd marchem chipul prietenului nostru, AI-ul Facebook รฎl va รฎnvฤƒศ›a ศ™i va รฎncerca sฤƒ o prezicฤƒ pรขnฤƒ cรขnd va obศ›ine rezultatul corect. Acelaศ™i sistem pe care รฎl vom folosi pentru a face propria noastrฤƒ recunoaศ™tere a feศ›ei. Sฤƒ รฎncepem sฤƒ facem propria noastrฤƒ recunoaศ™tere a feศ›ei folosind Deep Learning

Model de reศ›ea

Vom folosi un model de reศ›ea VGG16, dar cu greutatea VGGFace.

Arhitectura modelului VGG16

Model de reศ›ea

Ce este VGGFace? este implementarea Keras a Deep Face Recognition introdusฤƒ de Parkhi, Omkar M. et al. โ€žRecunoaศ™tere profundฤƒ a feศ›eiโ€. BMVC (2015). Cadrul foloseศ™te VGG16 ca arhitecturฤƒ de reศ›ea.

Puteศ›i descฤƒrca VGGFace de la 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()

Dupฤƒ cum puteศ›i vedea rezumatul reศ›elei

_________________________________________________________________
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):

vom face o Transferul รฎnvฤƒศ›ฤƒrii + Reglare finฤƒ pentru a accelera antrenamentul cu seturi de date mici. รŽn primul rรขnd, vom รฎngheศ›a straturile de bazฤƒ, astfel รฎncรขt straturile sฤƒ nu poatฤƒ fi antrenate.

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

apoi adฤƒugฤƒm propriul strat pentru a ne recunoaศ™te feศ›ele de testare. Vom adฤƒuga 2 straturi complet conectate ศ™i un strat de ieศ™ire cu 5 persoane de detectat.

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)

Sฤƒ vedem rezumatul reศ›elei noastre

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

Dupฤƒ cum puteศ›i vedea mai sus, dupฤƒ stratul pool5, acesta va fi aplatizat รฎntr-un singur vector caracteristic care va fi folosit de stratul dens pentru recunoaศ™terea finalฤƒ.

Ne pregฤƒtim feศ›ele

Acum sฤƒ ne pregฤƒtim feศ›ele. Am fฤƒcut un director format din 5 oameni celebri

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

Fiecare folder conศ›ine 10 imagini, pentru fiecare proces de instruire ศ™i evaluare. Este o cantitate foarte micฤƒ de date, dar aceasta este provocarea, nu?

Vom folosi ajutorul instrumentului Keras pentru a ne ajuta sฤƒ pregฤƒtim datele. Aceastฤƒ funcศ›ie va repeta รฎn folderul setului de date ศ™i apoi o va pregฤƒti astfel รฎncรขt sฤƒ poatฤƒ fi utilizatฤƒ รฎn antrenament.

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,
)

Pregฤƒtirea modelului nostru

Sฤƒ รฎncepem procesul de instruire prin compilarea reศ›elei noastre cu funcศ›ia de pierdere ศ™i optimizator. Aici, folosim sparse_categorical_crossentropy ca funcศ›ie de pierdere, cu ajutorul SGD ca optimizator de รฎnvฤƒศ›are.

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

Dupฤƒ cum puteศ›i vedea, precizia noastrฤƒ de validare este de pรขnฤƒ la 64%, acesta este un rezultat bun pentru o cantitate micฤƒ de date de antrenament. Putem รฎmbunฤƒtฤƒศ›i acest lucru adฤƒugรขnd mai multe straturi sau adฤƒugรขnd mai multe imagini de antrenament, astfel รฎncรขt modelul nostru sฤƒ poatฤƒ afla mai multe despre feศ›e ศ™i sฤƒ obศ›inฤƒ mai multฤƒ acurateศ›e.

Sฤƒ testฤƒm modelul nostru cu o imagine de test

Poza de testare

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']

folosind imaginea lui Robert Downey Jr. ca imagine de test, aratฤƒ cฤƒ chipul prezis este adevฤƒrat!

Prognoza folosind Live Cam!

Ce zici dacฤƒ ne testฤƒm abilitฤƒศ›ile cu implementarea acesteia cu o intrare de la o camerฤƒ web? Folosind OpenCV cu cascada Haar Face pentru a ne gฤƒsi faศ›a ศ™i cu ajutorul modelului nostru de reศ›ea, putem recunoaศ™te persoana.

Primul pas este sฤƒ vฤƒ pregฤƒtiศ›i feศ›ele dvs. ศ™i ale prietenului dvs. Cu cรขt avem mai multe date, cu atรขt rezultatul este mai bun!

Pregฤƒtiศ›i-vฤƒ ศ™i antrenaศ›i-vฤƒ reศ›eaua ca la pasul anterior, dupฤƒ finalizarea antrenamentului, adฤƒugaศ›i aceastฤƒ linie pentru a obศ›ine imaginea de intrare de la camerฤƒ

#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()

Care este mai bun? Keras sau Tensorflow

Keras oferฤƒ simplitate atunci cรขnd scrieศ›i scenariul. Putem รฎncepe sฤƒ scriem ศ™i sฤƒ รฎnศ›elegem direct cu Keras, deoarece nu este prea greu de รฎnศ›eles. Este mai uศ™or de utilizat ศ™i mai uศ™or de implementat, nu este nevoie sฤƒ faceศ›i multe variabile pentru a rula modelul. Deci, nu trebuie sฤƒ รฎnศ›elegem fiecare detaliu din procesul de backend.

Pe de altฤƒ parte, Tensorflow este operaศ›iunile de nivel scฤƒzut care oferฤƒ flexibilitate ศ™i operaศ›ii avansate dacฤƒ doriศ›i sฤƒ realizaศ›i un grafic sau un model de calcul arbitrar. De asemenea, Tensorflow poate vizualiza procesul cu ajutorul TensorBoard ศ™i un instrument specializat de depanare.

Aศ™adar, dacฤƒ doriศ›i sฤƒ รฎncepeศ›i sฤƒ lucraศ›i cu รฎnvฤƒศ›area profundฤƒ fฤƒrฤƒ atรขt de multฤƒ complexitate, utilizaศ›i Keras. Pentru cฤƒ Keras oferฤƒ simplitate ศ™i uศ™or de utilizat ศ™i uศ™or de implementat decรขt Tensorflow. Dar dacฤƒ doriศ›i sฤƒ scrieศ›i propriul algoritm รฎntr-un proiect de รฎnvฤƒศ›are profundฤƒ sau รฎn cercetare, ar trebui sฤƒ utilizaศ›i Tensorflow.

Rezumat

Deci, haideศ›i sฤƒ rezumam tot ce am discutat ศ™i fฤƒcut รฎn acest tutorial.

  • Keras รฎntr-un API de nivel รฎnalt care este folosit pentru a face reศ›elele de รฎnvฤƒศ›are profundฤƒ mai uศ™oare cu ajutorul motorului backend.
  • Keras este uศ™or de utilizat ศ™i de รฎnศ›eles cu suportul python, astfel รฎncรขt sฤƒ se simtฤƒ mai natural ca niciodatฤƒ. Este bun pentru รฎncepฤƒtorii care doresc sฤƒ รฎnveศ›e despre deep learning ศ™i pentru cercetฤƒtorii care doresc API uศ™or de utilizat.
  • Procesul de instalare este uศ™or ศ™i puteศ›i utiliza un mediu virtual sau folosind o platformฤƒ externฤƒ, cum ar fi AWS.
  • Keras vine, de asemenea, cu diverse tipuri de modele de reศ›ea, astfel รฎncรขt ne face mai uศ™or sฤƒ folosim modelul disponibil pentru pregฤƒtirea prealabilฤƒ ศ™i reglarea finฤƒ a modelului nostru de reศ›ea.
  • De asemenea, existฤƒ o mulศ›ime de tutoriale ศ™i articole despre utilizarea codurilor Keras din comunitฤƒศ›ile din รฎntreaga lume รฎn scopuri de รฎnvฤƒศ›are profundฤƒ.

Rezumaศ›i aceastฤƒ postare cu: