Innholdsfortegnelse[Gjemme seg][Forestilling]
De siste årene har nevrale nettverk vokst i popularitet siden de har vist seg å være ekstremt gode på et bredt spekter av oppgaver.
De har vist seg å være et godt valg for bilde- og lydgjenkjenning, naturlig språkbehandling og til og med å spille kompliserte spill som Go og sjakk.
I dette innlegget vil jeg lede deg gjennom hele prosessen med å trene et nevralt nettverk. Jeg vil nevne og forklare alle trinnene for å trene et nevralt nettverk.
Mens jeg vil gå gjennom trinnene, vil jeg gjerne legge til et enkelt eksempel for å sikre at det også er et praktisk eksempel.
Så kom og la oss lære å behandle nevrale nettverk
La oss starte enkelt og spørre hva er nevrale nettverk i utgangspunktet.
Hva er egentlig nevrale nettverk?
Nevrale nettverk er dataprogramvare som simulerer driften av den menneskelige hjernen. De kan lære av enorme mengder data og oppdage mønstre som folk kan finne vanskelig å oppdage.
Nevrale nettverk har vokst i popularitet de siste årene på grunn av deres allsidighet i oppgaver som bilde- og lydgjenkjenning, naturlig språkbehandling og prediktiv modellering.
Samlet sett er nevrale nettverk et sterkt verktøy for et bredt spekter av applikasjoner og har en sjanse til å transformere måten vi nærmer oss et bredt spekter av jobber på.
Hvorfor bør vi vite om dem?
Å forstå nevrale nettverk er avgjørende fordi de har ført til oppdagelser på en rekke felt, inkludert datasyn, talegjenkjenning og naturlig språkbehandling.
Nevrale nettverk er for eksempel kjernen i den siste utviklingen innen selvkjørende biler, automatiske oversettelsestjenester og til og med medisinsk diagnostikk.
Å forstå hvordan nevrale nettverk fungerer og hvordan de utformes, hjelper oss å bygge nye og oppfinnsomme applikasjoner. Og kanskje kan det føre til enda større funn i fremtiden.
En merknad om opplæringen
Som jeg sa ovenfor, vil jeg gjerne forklare trinnene for å trene et nevralt nettverk ved å gi et eksempel. For å gjøre dette bør vi snakke om MNIST-datasettet. Det er et populært valg for nybegynnere som ønsker å komme i gang med nevrale nettverk.
MNIST er et akronym som står for Modified National Institute of Standards and Technology. Det er et håndskrevet sifferdatasett som ofte brukes til å trene og teste maskinlæringsmodeller, spesielt nevrale nettverk.
Samlingen inneholder 70,000 0 gråtonebilder av håndskrevne tall fra 9 til XNUMX.
MNIST-datasettet er en populær målestokk for bildeklassifisering oppgaver. Det brukes ofte til undervisning og læring siden det er kompakt og enkelt å håndtere, samtidig som det utgjør en vanskelig utfordring for maskinlæringsalgoritmer å svare på.
MNIST-datasettet støttes av flere maskinlæringsrammeverk og biblioteker, inkludert TensorFlow, Keras og PyTorch.
Nå vet vi om MNIST-datasettet, la oss komme i gang med trinnene våre for å trene et nevralt nettverk.
Grunnleggende trinn for å trene et nevralt nettverk
Importer nødvendige biblioteker
Når du først begynner å trene et nevralt nettverk, er det avgjørende å ha de nødvendige verktøyene for å designe og trene modellen. Det første trinnet i å lage et nevralt nettverk er å importere nødvendige biblioteker som TensorFlow, Keras og NumPy.
Disse bibliotekene fungerer som byggesteiner for utviklingen av det nevrale nettverket og gir viktige muligheter. Kombinasjonen av disse bibliotekene gjør det mulig å lage sofistikerte nevrale nettverksdesign og rask trening.
For å begynne vårt eksempel; vi vil importere de nødvendige bibliotekene, som inkluderer TensorFlow, Keras og NumPy. tensorflow er et maskinlæringsrammeverk med åpen kildekode, Keras er et nevralt nettverks-API på høyt nivå, og NumPy er et numerisk databehandlings-Python-bibliotek.
import tensorflow as tf
from tensorflow import keras
import numpy as np
Last inn datasettet
Datasettet må nå lastes. Datasettet er settet med data som det nevrale nettverket skal trenes på. Dette kan være alle typer data, inkludert bilder, lyd og tekst.
Det er avgjørende å dele datasettet i to deler: en for å trene det nevrale nettverket og en annen for å vurdere riktigheten til den trente modellen. Flere biblioteker, inkludert TensorFlow, Keras og PyTorch, kan brukes til å importere datasettet.
For vårt eksempel bruker vi også Keras for å laste MNIST-datasettet. Det er 60,000 10,000 treningsbilder og XNUMX XNUMX testbilder i datasettet.
mnist = keras.datasets.mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
Forbehandle dataene
Dataforbehandling er et viktig stadium i trening av et nevralt nettverk. Det innebærer å klargjøre og rense dataene før de mates inn i det nevrale nettverket.
Skalering av pikselverdier, normalisering av data og konvertering av etiketter til one-hot-koding er eksempler på forbehandlingsprosedyrer. Disse prosessene hjelper det nevrale nettverket til å lære mer effektivt og presist.
Forbehandling av dataene kan også bidra til å minimere overtilpasning og forbedre ytelsen til det nevrale nettverket.
Du må forhåndsbehandle dataene før du trener det nevrale nettverket. Dette inkluderer å endre etikettene til én-hot-koding og skalere pikselverdiene til å være mellom 0 og 1.
train_images = train_images / 255.0
test_images = test_images / 255.0
train_labels = keras.utils.to_categorical(train_labels, 10)
test_labels = keras.utils.to_categorical(test_labels, 10)
Definer modellen
Prosessen med å definere den nevrale nettverksmodellen involverer å etablere dens arkitektur, for eksempel antall lag, antall nevroner per lag, aktiveringsfunksjoner og nettverkstype (tilbakekobling, tilbakevendende eller konvolusjon).
Den nevrale nettverksdesignen du bruker bestemmes av typen problem du prøver å løse. Et veldefinert nevralt nettverksdesign kan hjelpe til med læring av nevrale nettverk ved å gjøre det mer effektivt og nøyaktig.
Det er på tide å beskrive den nevrale nettverksmodellen på dette tidspunktet. Bruk en enkel modell med to skjulte lag, hver med 128 nevroner, og et softmax-utgangslag, som har 10 nevroner, for dette eksemplet.
model = keras.Sequential([
keras.layers.Flatten(input_shape=(28, 28)),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dense(10, activation='softmax')
])
Kompiler modellen
Tapsfunksjonen, optimizeren og metrikkene må spesifiseres under kompileringen av den nevrale nettverksmodellen. Det nevrale nettverkets evne til å forutsi utgangen korrekt måles av tapsfunksjonen.
For å øke nevrale nettverks nøyaktighet under trening, modifiserer optimizeren vektene. Effektiviteten til det nevrale nettverket under trening måles ved hjelp av beregninger. Modellen må lages før det nevrale nettverket kan trenes.
I vårt eksempel må vi nå akkurat nå konstruere modellen.
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
Tren modellen
Å føre det forberedte datasettet gjennom det nevrale nettverket mens du endrer nettverkets vekter for å minimere tapsfunksjonen er kjent som å trene det nevrale nettverket.
Valideringsdatasettet brukes til å teste det nevrale nettverket under trening for å spore effektiviteten og forhindre overtilpasning. Treningsprosessen kan ta litt tid, derfor er det viktig å sørge for at det nevrale nettverket er riktig trent for å forhindre undertilpasning.
Ved å bruke treningsdataene kan vi nå trene modellen. For å gjøre dette må vi definere batchstørrelsen (antall prøver behandlet før modellen oppdateres) og antall epoker (antall repetisjoner over hele datasettet).
model.fit(train_images, train_labels, epochs=10, batch_size=32)
Evaluering av modellen
Testing av det nevrale nettverkets ytelse på testdatasettet er prosessen med å evaluere det. I dette stadiet brukes det trente nevrale nettverket til å behandle testdatasettet, og nøyaktigheten blir evaluert.
Hvor effektivt et nevralt nettverk kan forutsi det riktige resultatet fra splitter nye, uprøvde data er et mål på nøyaktigheten. Å analysere modellen kan hjelpe med å bestemme hvor godt det nevrale nettverket fungerer og også foreslå måter å gjøre det enda bedre.
Vi kan endelig vurdere modellens ytelse ved hjelp av testdataene etter trening.
test_loss, test_acc = model.evaluate(test_images, test_labels)
print('Test accuracy:', test_acc)
Det er alt! Vi trente et nevralt nettverk for å oppdage sifre i MNIST-datasettet.
Fra å forberede dataene til å vurdere effektiviteten til den trente modellen, involverer trening av et nevralt nettverk flere prosesser. Disse instruksjonene hjelper nybegynnere med å effektivt bygge og trene nevrale nettverk.
Nybegynnere som ønsker å bruke nevrale nettverk for å takle ulike problemer kan gjøre det ved å følge disse instruksjonene.
Visualisere eksemplet
La oss prøve å visualisere hva vi har gjort med dette eksemplet for å forstå bedre.
Matplotlib-pakken brukes i denne kodebiten for å plotte et tilfeldig utvalg bilder fra treningsdatasettet. Først importerer vi Matplotlibs "pyplot"-modul og kaller den "plt". Deretter, med en total dimensjon på 10 x 10 tommer, lager vi en figur med 5 rader og 5 kolonner med underplott.
Deretter bruker vi en for-løkke for å iterere over delplottene, og viser et bilde fra treningsdatasettet på hver enkelt. For å vise bildet brukes "imshow"-funksjonen, med "cmap"-alternativet satt til 'grå' for å vise bildene i gråtoner. Tittelen på hvert delplott er også satt til etiketten til det tilknyttede bildet i samlingen.
Til slutt bruker vi «vis»-funksjonen for å vise de plottede bildene i figuren. Denne funksjonen lar oss vurdere et utvalg bilder fra datasettet visuelt, noe som kan hjelpe oss med å forstå dataene og identifisere eventuelle bekymringer.
import matplotlib.pyplot as plt
# Plot a random sample of images
fig, axes = plt.subplots(nrows=5, ncols=5, figsize=(10,10))
for i, ax in enumerate(axes.flat):
ax.imshow(train_images[i], cmap='gray')
ax.set_title(f"Label: {train_labels[i].argmax()}")
ax.axis('off')
plt.show()
Viktige nevrale nettverksmodeller
- Feedforward Neural Networks (FFNN): En enkel type nevrale nettverk der informasjon bare går på én måte, fra inngangslaget til utdatalaget via ett eller flere skjulte lag.
- Convolutional Neural Networks (CNN): Et nevralt nettverk som ofte brukes i bildegjenkjenning og -behandling. CNN-er er ment å gjenkjenne og trekke ut funksjoner fra bilder automatisk.
- Tilbakevendende nevrale nettverk (RNN): Et nevralt nettverk som ofte brukes i bildegjenkjenning og -behandling. CNN-er er ment å gjenkjenne og trekke ut funksjoner fra bilder automatisk.
- Langtidsminne (LSTM) nettverk: En form for RNN laget for å overvinne problemet med forsvinnende gradienter i standard RNN-er. Langsiktige avhengigheter i sekvensielle data kan fanges bedre opp med LSTMer.
- Autoenkodere: Uovervåket læringsnevrale nettverk der nettverket blir lært opp til å reprodusere inngangsdata ved utgangslaget. Datakomprimering, avviksdeteksjon og bildeforringing kan alle oppnås med autoenkodere.
- Generative Adversarial Networks (GAN): Et generativt nevralt nettverk er en form for nevralt nettverk som læres å produsere nye data som kan sammenlignes med et treningsdatasett. GAN-er består av to nettverk: et generatornettverk som lager ferske data og et diskriminatornettverk som vurderer kvaliteten på de opprettede dataene.
Avslutning, hva bør være de neste trinnene dine?
Utforsk flere nettressurser og kurs for å lære mer om å trene et nevralt nettverk. Å jobbe med prosjekter eller eksempler er en metode for å få et bedre grep om nevrale nettverk.
Start med enkle eksempler som binære klassifiseringsproblemer eller bildeklassifiseringsoppgaver, og gå deretter til vanskeligere oppgaver som naturlig språkbehandling eller forsterkning læring.
Å jobbe med prosjekter hjelper deg med å få ekte erfaring og forbedre dine nevrale nettverkstreningsferdigheter.
Du kan også bli med på nettbasert maskinlæring og nevrale nettverksgrupper og -fora for å samhandle med andre elever og fagfolk, dele arbeidet ditt og motta kommentarer og hjelp.
LSRS MONRAD-KROHN
⁶ĵ Skulle gjerne sett python-programmet for feilminimering. Spesielle utvalgsnoder for vektendringer til neste lag