Tādi lasītāji kā jūs palīdz atbalstīt MUO. Veicot pirkumu, izmantojot saites mūsu vietnē, mēs varam nopelnīt filiāles komisiju. Lasīt vairāk.

Neironu tīkli ir svarīgs jēdziens mākslīgā intelekta un mašīnmācīšanās jomā. Tie sastāv no savstarpēji savienotiem mezgliem, kas sakārtoti slāņos un atdarina cilvēka smadzeņu darbību. Mezgli attēlo cilvēka smadzeņu neironus.

Jūs varat izveidot savu vienkāršu padeves uz priekšu, vairāku klašu klasifikācijas neironu tīklu. Apmāciet to klasificēt ar roku rakstītus ciparus, izmantojot MNIST datu kopu. Pēc tam varat izmantot datorredzi, lai klasificētu savus ar roku rakstītos ciparus.

Kas ir vairāku klašu klasifikācija?

Vairāku klašu klasifikācija ir mašīnmācīšanās veids, kas var klasificēt datus vairāk nekā divās kategorijās. Neironu tīkli izmanto softmax klasifikatoru, lai sadalītu varbūtību pa iespējamām klasēm.

Varat izmantot vairāku klašu klasifikāciju, lai klasificētu ar roku rakstītus attēlus no MNIST datu kopas 10 kategorijās. Šīs kategorijas atbildīs cipariem no 0 līdz 9.

instagram viewer

Izpratne par MNIST datu kopu

MNIST datu kopa ir populāra mašīnmācības un datorredzes algoritmu etalondatu kopa. Tajā ir 70 000 pelēktoņu ar roku rakstītu attēlu, kuru izmērs ir 28 x 28 pikseļi. Ar roku rakstītie cipari ir diapazonā no 0 līdz 9.

Pirms jebkura mašīnmācīšanās modeļa izveides ir svarīgi saprast, ko satur jūsu datu kopa. Izpratne par datu kopu ļaus jums veikt labāku datu priekšapstrādi.

Vides sagatavošana

Lai sekotu šai apmācībai, jums ir jāzina Python pamati. Jums vajadzētu būt arī a pamatzināšanas mašīnmācībā. Visbeidzot, jums vajadzētu būt ērtiem, izmantojot Jupyter Notebook vai Google Colab.

Pilns avota kods ir pieejams a GitHub repozitorijs.

Izveidojiet jaunu Jupyter piezīmju grāmatiņu vai pierakstieties tajā Google Colab. Palaidiet šo komandu, lai instalētu nepieciešamās pakotnes:

!pip instalēt numpy matplotlib tensorflow opencv-python

Jūs izmantosiet:

  • Matplotlib datu vizualizācijai.
  • NumPy, lai manipulētu ar masīviem.
  • TensorFlow, lai izveidotu un apmācītu savu modeli.
  • OpenCV, lai barotu modeli ar saviem ar roku rakstītiem cipariem.

Nepieciešamo moduļu importēšana

Importējiet savā vidē instalētās pakotnes. Tas ļaus vēlāk piezvanīt un izmantot to funkcijas un moduļus savā kodā.

imports tenzorplūsma  tf
no tenzorplūsma imports keras
imports matplotlib.pyplot plt
%matplotlib iekļauts
imports nejutīgs np
imports cv2

Otrā koda rinda importē Keras moduli no Google TensorFlow bibliotēka. Jūs izmantosiet Keras, lai apmācītu savu dziļo neironu tīklu ar TensorFlow kā aizmugursistēmu.

Datu kopas ielāde un apskate

MNIST datu kopa ir iebūvēta Keras. Ielādējiet MNIST datu kopu un sadaliet to apmācības un testa kopās. Jūs izmantosiet apmācības komplektu, lai apmācītu savu modeli, un testa komplektu, lai novērtētu modeļa precizitāti jaunu neredzētu attēlu klasificēšanā.

(X_train, y_train), (X_test, y_test) = keras.datasets.mnist.load_data()

Pārbaudiet apmācības un testa komplektu ilgumu. MNIST datu kopā ir 60 000 attēlu apmācībai un 10 000 attēlu pārbaudei.

len (X_train)
len (X_test)

Pārbaudiet pirmā attēla formu MNIST datu kopā, kurai jābūt 28 x 28 pikseļiem. Pēc tam izdrukājiet tā pikseļu vērtības un vizualizējiet to, izmantojot Matplotlib.

X_train[0].forma
X_train[0]
plt.matshow (X_train[0])
y_train[0]

Vizualizācijas izvade ir šāda:

Vizualizētais attēls parāda, ka pirmajā datu kopas attēlā ir skaitlis pieci.

Datu priekšapstrāde

Pirms datu kopas datu izmantošanas modeļa apmācīšanai un testēšanai, tie ir iepriekš jāapstrādā. Iepriekšēja apstrāde uzlabo modeļa precizitāti, standartizējot datus.

Pikseļu vērtību normalizēšana

Normalizējiet attēlu pikseļu vērtības datu kopā, dalot katru vērtību ar 255. Nenormalizētās datu kopas pikseļu vērtības ir robežās no 0 līdz 255, kur nulle ir melna un 255 ir balta. Katra pikseļa vērtības dalīšana ar 255 nodrošina, ka katrs pikselis ir diapazonā no 0 līdz 1. Tādējādi modelim ir vieglāk apgūt atbilstošās datu funkcijas un modeļus.

X_vilciens = X_vilciens / 255
X_test = X_test / 255

Pēc tam izdrukājiet pirmā attēla pikseļu vērtības.

X_train[0]

Ņemiet vērā, ka tie tagad ir diapazonā no 0 līdz 1.

Attēlu matricu pārveidošana 1D masīvā

Neironu tīkla ievades slānis parasti sagaida 1D ievadi, tāpēc izveidojiet attēla pikseļu vērtību 1D masīvu. Lai to izdarītu, izmantojiet funkciju reshape() ar izejvielu skaitu, kas iestatīts uz attēlu skaitu datu kopā.

X_train_flattened = X_train.reshape (len (X_train), 28 * 28)
X_test_flattened = X_test.reshape (len (X_test), 28 * 28)
X_vilciens_saplacināts.forma
X_train_flattened[0]

Jūsu attēli tagad ir gatavi apmācībai un modeļa testēšanai.

Dziļā neironu tīkla modeļa izveide

Izveidojiet secīgu modeli ar Tensorflow Keras moduli, izmantojot ievades slāni, divus slēptos slāņus un izvades slāni. Iestatiet ievades formu uz 28 x 28, jo tā ir datu kopas sākotnējo attēlu forma. Slēptajiem slāņiem izmantojiet 128 mezglus. Izvades slānī jābūt tikai 10 neironiem, jo ​​jūs klasificējat tikai ciparus no 0 līdz 9.

modelis = keras. Secīgi ([
keras.slāņi. Izlīdzināt (input_shape=(28, 28)),

keras.slāņi. Blīvs(128, aktivizēšana='relu'),
keras.slāņi. Blīvs(128, aktivizēšana='relu'),

keras.slāņi. Blīvs(10, aktivizēšana='softmax')
])

Sastādiet modeli, izmantojot Ādams optimizētājs, reti_categorical_crossentropy kā zaudējumu funkcija un metrika, lai novērtētu modeļa veiktspēju kā precizitāte. Pēc tam ievietojiet apmācību datus modelī un iestatiet laikmetu skaitu uz pieciem.

model.compile (optimizer='ādams',
zaudējums ='sparse_categorical_crossentropy',
metrika=['precizitāte'])

model.fit (X_train, y_train, epochs=5)

Modeļa apmācība prasīs dažas minūtes. Kad modeļa apmācība ir beigusies, novērtējiet tā veiktspēju testa komplektā.

model.evaluate (X_test, y_test)

Novērtēšanas funkcija atgriezīs modeļa zudumu un precizitāti. Modelis nodrošina 98% precizitāti.

Modeļa izmantošana savu ar roku rakstīto ciparu klasificēšanai

Lai klasificētu savus ar roku rakstītos ciparus, jums ir jāsagatavo attēli, lai tie atbilstu MNIST datu kopas attēliem. Ja to neizdarīsit, jūsu modelis darbosies slikti.

Lai iepriekš apstrādātu attēlus:

  1. Ielādējiet attēlu, kurā ir cipars, izmantojot OpenCV.
  2. Pārvērtiet to pelēktoņos un mainiet tā izmēru uz 28x28 pikseļiem.
  3. Apgrieziet un normalizējiet pikseļu vērtības.
  4. Visbeidzot, saplaciniet attēlu 1D masīvā.

Ievietojiet iepriekš apstrādāto attēlu modelī prognozēšanai un izdrukājiet paredzēto vērtību uz ekrāna.

img = cv2.imread('digits/digit1.png', cv2.IMREAD_GRAYSCALE)
img_resize = cv2.resize (img, (28, 28))
img_flip = cv2.bitwise_not (img_resize)
img_normalized = img_flip.astype('float32') / 255.0

# Izlīdziniet attēlu 1D masīvā
ievades_dati = img_normalized.flatten().reshape( 1,28,28)

# Veiciet prognozi, izmantojot modeli
prognoze = model.predict (ievades_dati)
drukāt (f'Prognoze: {np.argmax (prognoze)}')

Iepriekš apstrādāta attēla, kurā ir skaitlis, nodošana modelim.

Modeļa izvade ir šāda:

Modelis spēja pareizi klasificēt ciparu septiņi.

Neironu tīkli tērzēšanas robotos

Neironu tīklu izmantošana pēdējos gados ir strauji pieaugusi. Tie galvenokārt ir izmantoti dabiskās valodas apstrādē valodu tulkošanai un ģeneratīvai AI.

Pavisam nesen ir pieaudzis to tērzēšanas robotu skaits, kas spēj sazināties cilvēkiem līdzīgā veidā. Viņi izmanto neironu tīkla veidu, kas pazīstams kā transformatora neironu tīkls. Mijiedarbojieties ar dažiem no tiem un izbaudiet neironu tīklu spēku.