Gekissimo.net - Opi ansaitsemaan rahaa webilläsi Internetissä!

Kuinka tiivistää syväoppimismalleja reunalaitteille kvantisoinnin avulla?

Seuraava artikkeli auttaa sinua: Kuinka tiivistää syväoppimismalleja reunalaitteille kvantisoinnin avulla?

Kvantisointi on prosessi, jossa otetaan käyttöön syväoppimis- tai koneoppimismalleja reunalaitteisiin, kuten älypuhelimiin, älytelevisioihin, älykelloihin ja moniin muihin. Mutta valtavan mallin käyttöönotto reunalaitteissa ei ole mahdollista muistirajoitusten vuoksi, ja tässä käytetään kvantisointiprosessia. Se tiivistää valtavat mallit, jotta ne voidaan ottaa käyttöön reunalaitteissa virheettömästi. Tämä artikkeli tarjoaa lyhyen yleiskatsauksen valtavien Tensorflow-mallien tiivistämiseen kevyiksi malleiksi käyttämällä TensorFlow litea ja Tensorflow Model Optimizationia.

Sisällysluettelo

  1. Johdatus kvantisointiin
  2. Erilaisia ​​kvantisointitekniikoita
  3. Syvän oppimismallin rakentaminen tyhjästä
  4. Harjoittelun jälkeinen kvantisointitekniikan toteutus
  5. Tietoisen mallin kvantisointitekniikan toteutus
  6. Alkuperäisen mallin ja kvantisoidun mallin ennusteen vertailu
  7. Yhteenveto

Johdatus kvantisointiin

Kvantisointi syväoppimisen suhteen on prosessi, jossa approksimoidaan hermoverkkojen painot, jotka on saatu eri kerrosten läpi etenemisen jälkeen lähimpään kokonaislukuarvoon tai lyhyisiin pienempiin bittilukuihin. Tämä muunnos mahdollistaa kaikkien raskaiden syväoppimismallien helpon käyttöönoton reunalaitteissa saumattomasti, koska raskas malli tiivistetään nyt kevyempiin malleihin ja mallien tulokset voidaan visualisoida reunalaitteissa.

Etsitkö täydellistä arkistoa tietotieteessä käytettävistä Python-kirjastoista, katso tästä.

Raskaiden syväoppimismallien ajamiseen alemmilla prosessoriyksiköillä, kuten älylaitteilla, liittyvä ristiriita on voitettu kvantisoinnilla, jolloin mallin kokonaismuistinkulutus pienenee lähes kolmannekseen tai neljäsosaan alkuperäisen Tensorflow-mallin painoista.

Katsotaanpa nyt erityyppisiä kvantisointitekniikoita.

Erilaisia ​​kvantisointitekniikoita

Raskaimmille syväoppimismalleille on olemassa pääasiassa kahdenlaisia ​​kvantisointitekniikoita. He ovat:-

  • Harjoittelun jälkeinen kvantisointi
  • Tietoisen harjoittelun kvantisointi

Molemmat kvantisointitekniikat toimivat TensorFlow-lite-moduulin valvonnassa, jota käytetään tiivistämään raskaammat mallit ja työntämään ne reunalaitteisiin.

Harjoittelun jälkeinen kvantisointi

Harjoittelun jälkeisessä kvantisointitekniikassa raskaampi TensorFlow-malli tiivistetään pienempään Tensorflow-lite-moduulin avulla ja reunalaitteissa se todennäköisesti otetaan käyttöön pieninä Tensorflow-malleina. Mutta ongelma tässä kvantisointitekniikassa on, että vain reunalaitteen mallin muistin varaus on pakattu, mutta reunalaitteiden mallia ei voida käyttää millekään parametrille eikä edes mallin suorituskykyyn, jos sitä verrataan tarkkuus olisi pienempi verrattuna Tensorflow-malliin testausvaiheessa. Joten tämä kvantisointitekniikka antaisi tuotannossa epäluotettavan mallin, joka osoittaa huonon suorituskyvyn merkkejä.

🔥 Empfohlen:  Kuinka teimme 28 785 dollaria bloggaamisesta tässä kuussa (elokuu 2023)

Tietoisen harjoittelun kvantisointi

Tietoista harjoittelun kvantisointitekniikkaa käytetään voittamaan harjoituksen jälkeisen tekniikan rajoitukset, kun tämä tekniikka on vastuussa kehitteillä olevan raskaan TensorFlow-mallin kypsymisestä niin, että se edistyy kvantisoidun mallin läpi, jolla on hyvin määritellyt parametrit ja joka tuottaa hienosäädetyn kvantisoidun mallin, joka voidaan siirtää Tensorflow-lite-moduuliin hienosäätääkseen ja saadakseen täydellisen kevyemmän paketin Tensorflow-mallista, joka on kehitetty valmiiksi käyttöönotettavaksi reunalaitteisiin.

Deep Learning -mallin rakentaminen tyhjästä

Tässä tapaustutkimuksessa Fashion MNIST -tietojoukkoa käytetään Tensorflow-mallin rakentamiseen. Tässä tietojoukossa on 10 luokiteltavaa vaateluokkaa. Katsotaanpa, kuinka luodaan syvä oppimismalli tietojoukossa olevien 10 luokan luokittelua varten.

Ensimmäiset vaiheet alkavat vaadittujen TensorFlow-kirjastojen tuomisella ja tietojoukon hankkimisella. Tämä tietojoukko on helposti saatavilla Tensorflow-moduulissa, ja tämä tietojoukko on esikäsiteltävä jakamalla tietojoukko asianmukaisesti junaan ja testaukseen sekä suoritettava vaadittu uudelleenmuotoilu ja koodaus. Kun täydellinen esikäsitelty data on saatavilla, mallin rakentamiseen voidaan ryhtyä tarvittavalla määrällä kerroksia ja se voidaan koota asianmukaisilla häviöfunktioilla ja mittareilla. Kun kaikki tämä on käsissä, malli voidaan lopulta sovittaa tarvittavalle iteraatiomäärälle.

import tensorflow as tf import numpy as np tuonti matplotlib.pyplot as plt from tensorflow.keras.layers tuonti Flatten,Dense,Dropout,Conv2D,MaxPooling2D from tensorflow.keras.models tuonti peräkkäinen osoitteesta tensorflow.keras.utils tuonti to_categorical riviltä tensorflow.keras.datasets tuonti fashion_mnist (X_train,Y_train),(X_test,Y_test)=fashion_mnist.load_data() plt.figure(figsize=(15,5)) i:lle alueella(10): plt.subplot(2, 5,i+1) plt.imshow(X_train[i]) plt.axis(‘off’) plt.show()

Joten nyt olemme validoineet tietojen jaon onnistuneesti, voimme jatkaa mallin rakentamista.

model1=Sequential() model1.add(Conv2D(32,ytimen_size=2,input_shape=(28,28,1),aktivointi=’relu’)) model1.add(MaxPooling2D(pool_size=(2,2))) malli1 .add(Conv2D(16,ytimen_koko=2,aktivointi=’relu’)) model1.add(MaxPooling2D(pool_size=(2,2))) model1.add(Flatten()) model1.add(Tihe(125,aktivointi) =’relu’)) model1.add(Tihe(10,aktivointi=’softmax’)) model1.summary()

model1.compile(loss=”sparse_categorical_crossentropy”,optimizer=”adam”,metrics=[‘accuracy’]) model1_fit_res=model1.fit(X_train,Y_train,epochs=10,validation_data=(X_test,Y_test))

print(‘Mallin harjoitteluhäviö : {} ja harjoituksen tarkkuus on : {}’.format(model1.evaluate(X_train,Y_train)[0],malli1.evaluate(X_train,Y_train)[1]))

print(‘Mallin testaushäviö: {} ja testauksen tarkkuus on: {}’.format(model1.evaluate(X_test,Y_test)[0],malli1.evaluate(X_test,Y_test)[1]))

Tallennetaan nyt tämä Tensorflow-malli, jotta sitä voidaan käyttää kvantisointiin myöhemmin.

model1.save(‘TF-Model’)

Katsotaanpa nyt kuinka kvantisointitekniikat toteutetaan tallennettua mallia käyttämällä.

Harjoittelun jälkeinen kvantisointi

Ennen kuin suoritat kvantisoinnin, tarkkaillaan koko Tensorflow:n muistin kokonaismäärää työympäristössä.

🔥 Empfohlen:  Kuinka estää Microsoft Edgeä ottamasta kuvakaappauksia jokaisesta vierailemastasi sivusta

tf_lite_conv=tf.lite.TFLiteConverter.from_saved_model(‘/content/drive/MyDrive/Colab notebooks/Quantization in neuro Network]/TF-Model’) tf_lite_mod=tf_lite_conv.convert() print(‘Levyn muisti on ‘,len(tf_lite_mod))

Harjoittelun jälkeisen kvantisoinnin suorittaminen

Tämä kvantisointitekniikka otetaan käyttöön käyttämällä TensorFlow lite -moduulin oletusoptimointitekniikkaa ja saadut oletusoptimoinnit muunnetaan kvantisoiduksi malliksi käyttämällä muunnostoimintoa käyttämällä tätä mallia, jotta voimme vahvistaa kvantisoidun mallin muistin varauksen jälkiharjoittelun avulla. optimointi.

post_tr_conv=tf.lite.TFLiteConverter.from_saved_model(“/content/drive/MyDrive/Colab notebooks/Quantization in neuro Network]/TF-Model”) post_tr_conv.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_quant_model = post_tr_conv.convert() print(‘Kvantisoidun TF-mallin muisti levyllä on ‘,len(tflite_quant_model))

Joten tässä voimme selvästi havaita erot alkuperäisen Tensorflow-mallin ja kvantisoidun mallin muistin varauksessa, jossa voimme selvästi nähdä, että kvantisointitekniikka on tiivistänyt alkuperäisen Tensorflow-mallin kolmannekseen alkuperäisestä muistin varauksesta. Mutta kuten aiemmin mainittiin, tämä tekniikka sopii paremmin vain mallin pakkaamiseen ja muistin varauksen vahvistamiseen. Joten mallin paremman suorituskyvyn arvioimiseksi reunalaitteissa käytetään Aware Training Quantization -tekniikkaa.

Tietoisen mallin kvantisointitekniikan toteutus

Tämä kvantisointitekniikka on yksi tehokkaimmista kvantisointitekniikoista, koska se ei vain tiivistä raskaampia malleja, vaan tuottaa myös luotettavia mallin suorituskykyparametreja ja osoittaa myös huomattavaa suorituskykyä, kun kondensoitua TensorFlow-mallia käytetään reunalaitteissa. Katsotaanpa vaiheet, jotka liittyvät tämän kvantisointitekniikan toteuttamiseen.

!pip install tensorflow-model-optimization tuonti tensorflow_model_optimization muodossa tfmod_opt quant_aw_model=tfmod_opt.quantization.keras.quantize_model quant_aw_model_fit=quant_aw_model(malli1)

Joten nyt kun olemme luoneet kvantisoidun mallin, meidän on jälleen koottava malli sopivilla häviöfunktioilla ja -mittareilla ja myöhemmin sovitettava tämä sama malli jaettuun dataan.

quant_aw_model_fit.compile(loss=”sparse_categorical_crossentropy”,metrics=[‘accuracy’],optimizer=”adam”) quant_aw_model_fit.summary()

quant_mod_res=quant_aw_model_fit.fit(X_train,Y_train,epochs=10,validation_data=(X_test,Y_test))

Kvantisoidun mallin parametrien arviointi

print(‘Kvantisoidun mallin harjoitushäviö : {} ja harjoituksen tarkkuus on : {}’. format(quant_aw_model_fit.evaluate(X_train,Y_train)[0],quant_aw_model_fit.evaluate(X_train,Y_train)[1]))

print(‘Kvantisoidun mallin testaushäviö : {} ja testauksen tarkkuus on : {}’. format(quant_aw_model_fit.evaluate(X_test,Y_test)[0],quant_aw_model_fit.evaluate(X_test,Y_test)[1]))

Tarkastetaan nyt kvantisoidun mallin ja alkuperäisen Tensorflow-mallin muistin varaus käyttämällä joitain TensorFlow lite -paketteja.

print(‘Levyllä olevan TF-mallin muisti on ‘,len(tf_lite_mod)) print() print(‘Kvantisointitietoisen mallin muistin varaus’,len(tflite_qaware_model))

Joten tässä voimme selvästi nähdä eron kvantisoitujen mallibittien ja alkuperäisten TensorFlow-mallibittien välillä muistinkulutuksen suhteen. Koska arvioimme myös sekä alkuperäisen Tensorflow- että kvantisoidun mallin tiettyjä parametreja, suorituskykyä ei havaittu. Paremman vertailun vuoksi yritetään verrata sekä Tensorflow- että Quantized-mallin luokittelukykyä eri tyyppisten vaatteiden oikeaan luokitteluun.

🔥 Empfohlen:  11 hienoa pienyritysblogia, jotka osoittavat, että kaikki yritykset voivat tehdä sisältömarkkinointia

Alkuperäisen mallin ja kvantisoidun mallin ennusteen vertailu

y_pred=model1.predict(X_test) figure = plt.figure(figsize=(15,5)) for i, index in enumerate(np.random.choice(X_test.shape)[0]koko=15, korvaa=False)): ax = figure.add_subplot(3, 5, i + 1, xticks=[]yticks=[]) ax.imshow(np.squeeze(X_test[index])) ennustaa_indeksi=np.argmax(y_pred[index]) true_index=Y_test[index]
ax.set_title(“{} ({})”.format(labels[predict_index]etiketit[true_index]), color=(“vihreä” jos ennustaa_indeksi == tosi_indeksi muuten “punainen”))

Koska olemme visualisoineet alkuperäisen TensorFlow-mallin kyvyn luokitella vaatteet, yritetään vahvistaa, onko Quantized-mallissa virheitä, joita käytettäisiin tuotantoon reunalaitteissa.

y_pred_quant_aw=quant_aw_model_fit.predict(X_test) figure = plt.figure(figsize=(15,5)) i:lle, indeksi enumerate(np.random.choice(X_test.shape)[0]koko=15, korvaa=False)): ax = figure.add_subplot(3, 5, i + 1, xticks=[]yticks=[]) ax.imshow(np.squeeze(X_test[index])) ennustaa_indeksi=np.argmax(y_pred[index]) true_index=Y_test[index]
ax.set_title(“{} ({})”.format(labels[predict_index]etiketit[true_index]), color=(“vihreä” jos ennustaa_indeksi == tosi_indeksi muuten “punainen”))

Yhteenveto

Joten kuten tässä artikkelissa selvästi mainittiin, näin käytetään erilaisia ​​kvantisointitekniikoita valtavien syväoppimismallien tiivistämiseen pienemmiksi biteiksi vähentämällä kehitetyn tilan kokonaismuistin varausta kolmannekseksi tai neljännekseksi mallin kokonaismuistin käyttöasteesta ja käyttöönotto. se reunalaitteissa, joissa olisi suhteellisen vähän muistia. Joten jos kvantisointitekniikka otetaan käyttöön, kaikki monimutkaiset syväoppimismallit voidaan tiivistää kevyemmiksi malleiksi ja ottaa käyttöön reunalaitteissa.

Viitteet