Implementering av neurala nätverk
Grundläggande översikt av neurala nätverk
Du har nu nått en nivå där du har den grundläggande kunskapen om TensorFlow för att skapa neurala nätverk på egen hand. Även om de flesta neurala nätverk i verkliga tillämpningar är komplexa och vanligtvis byggs med högnivåbibliotek som Keras, kommer vi att konstruera ett grundläggande nätverk med hjälp av grundläggande TensorFlow-verktyg. Detta tillvägagångssätt ger oss praktisk erfarenhet av låg-nivå tensorhantering, vilket hjälper oss att förstå de underliggande processerna.
I tidigare kurser som Introduktion till neurala nätverk kanske du minns hur mycket tid och ansträngning det tog att bygga även ett enkelt neuralt nätverk, där varje neuron behandlades individuellt.
TensorFlow förenklar denna process avsevärt. Genom att använda tensorer kan du inkapsla komplexa beräkningar, vilket minskar behovet av invecklad kodning. Vårt huvudsakliga uppdrag är att sätta upp en sekventiell kedja av tensoroperationer.
Här är en kort repetition av stegen för att starta en träningsprocess för ett neuralt nätverk:
Databeredning och modellskapande
Den inledande fasen av träning av ett neuralt nätverk innebär förberedelse av data, vilket omfattar både inmatningar och utmatningar som nätverket ska lära sig från. Dessutom fastställs modellens hyperparametrar – dessa är parametrar som förblir konstanta under hela träningsprocessen. Vikterna initialiseras, vanligtvis slumpmässigt från en normalfördelning, och biasvärdena, som ofta sätts till noll.
Framåtriktad propagiering
Vid framåtriktad propagiering följer varje lager i nätverket vanligtvis dessa steg:
- Multiplicera lagrets indata med dess vikter.
- Lägg till en bias till resultatet.
- Applicera en aktiveringsfunktion på denna summa.





Sedan kan förlusten beräknas.
Bakåtriktad propagiering
Nästa steg är bakåtriktad propagiering, där vikter och bias justeras baserat på deras påverkan på förlusten. Denna påverkan representeras av gradienten, som TensorFlows Gradient Tape beräknar automatiskt. Vi uppdaterar vikter och bias genom att subtrahera gradienten, skalad med inlärningshastigheten.



Träningsloop
För att effektivt träna neurala nätverket upprepas träningsstegen flera gånger samtidigt som modellens prestanda övervakas. Idealiskt sett bör förlusten minska över epokerna.
Tack för dina kommentarer!
single
Implementering av neurala nätverk
Svep för att visa menyn
Grundläggande översikt av neurala nätverk
Du har nu nått en nivå där du har den grundläggande kunskapen om TensorFlow för att skapa neurala nätverk på egen hand. Även om de flesta neurala nätverk i verkliga tillämpningar är komplexa och vanligtvis byggs med högnivåbibliotek som Keras, kommer vi att konstruera ett grundläggande nätverk med hjälp av grundläggande TensorFlow-verktyg. Detta tillvägagångssätt ger oss praktisk erfarenhet av låg-nivå tensorhantering, vilket hjälper oss att förstå de underliggande processerna.
I tidigare kurser som Introduktion till neurala nätverk kanske du minns hur mycket tid och ansträngning det tog att bygga även ett enkelt neuralt nätverk, där varje neuron behandlades individuellt.
TensorFlow förenklar denna process avsevärt. Genom att använda tensorer kan du inkapsla komplexa beräkningar, vilket minskar behovet av invecklad kodning. Vårt huvudsakliga uppdrag är att sätta upp en sekventiell kedja av tensoroperationer.
Här är en kort repetition av stegen för att starta en träningsprocess för ett neuralt nätverk:
Databeredning och modellskapande
Den inledande fasen av träning av ett neuralt nätverk innebär förberedelse av data, vilket omfattar både inmatningar och utmatningar som nätverket ska lära sig från. Dessutom fastställs modellens hyperparametrar – dessa är parametrar som förblir konstanta under hela träningsprocessen. Vikterna initialiseras, vanligtvis slumpmässigt från en normalfördelning, och biasvärdena, som ofta sätts till noll.
Framåtriktad propagiering
Vid framåtriktad propagiering följer varje lager i nätverket vanligtvis dessa steg:
- Multiplicera lagrets indata med dess vikter.
- Lägg till en bias till resultatet.
- Applicera en aktiveringsfunktion på denna summa.





Sedan kan förlusten beräknas.
Bakåtriktad propagiering
Nästa steg är bakåtriktad propagiering, där vikter och bias justeras baserat på deras påverkan på förlusten. Denna påverkan representeras av gradienten, som TensorFlows Gradient Tape beräknar automatiskt. Vi uppdaterar vikter och bias genom att subtrahera gradienten, skalad med inlärningshastigheten.



Träningsloop
För att effektivt träna neurala nätverket upprepas träningsstegen flera gånger samtidigt som modellens prestanda övervakas. Idealiskt sett bör förlusten minska över epokerna.
Svep för att börja koda
Skapa ett neuralt nätverk utformat för att förutsäga resultaten av XOR-operationen. Nätverket ska bestå av 2 inmatningsneuroner, ett dolt lager med 2 neuroner och 1 utgångsneuron.
- Börja med att initiera de initiala vikterna och biaserna. Vikterna ska initieras med en normalfördelning, och biaserna ska alla initieras till noll. Använd hyperparametrarna
input_size,hidden_sizeochoutput_sizeför att definiera lämpliga former för dessa tensorer. - Använd en funktionsdekoratör för att omvandla funktionen
train_step()till en TensorFlow graf. - Utför framåtriktad propagiering genom både det dolda och utgångslagret i nätverket. Använd sigmoid-aktiveringsfunktion.
- Bestäm gradienterna för att förstå hur varje vikt och bias påverkar förlusten. Säkerställ att gradienterna beräknas i korrekt ordning, i enlighet med utgångsvariablernas namn.
- Justera vikter och biaser baserat på deras respektive gradienter. Inkludera
learning_ratei denna justeringsprocess för att styra omfattningen av varje uppdatering.
Lösning
Databeredning
X_data: detta är indata för XOR-funktionen. Det är en NumPy-array med formen (4, 2), som representerar de fyra möjliga kombinationerna av XOR-indata (0,0), (0,1), (1,0) och (1,1);Y_data: detta är målutdata för varje indata-kombination iX_data. Det är också en NumPy-array men med formen (4, 1), som representerar XOR-utdata för varje indata-par.
Nätverksparametrar
input_size: storleken på inmatningslagret, satt till 2, vilket motsvarar de två inmatningsnoderna (för de två indata till XOR-funktionen);hidden_size: storleken på det dolda lagret, också satt till 2. Detta val är något godtyckligt men räcker för att lära sig XOR-funktionen;output_size: storleken på utmatningslagret, satt till 1, vilket motsvarar den enda utmatningsnoden (resultatet av XOR-operationen);learning_rate: detta är inlärningshastigheten för optimeringsalgoritmen, som styr hur mycket vikterna justeras under träningen.
Vikter och bias
W1ochb1: vikterna (W1) och bias (b1) för kopplingarna från inmatningslagret till det dolda lagret.W1är en TensorFlow-variabel som initieras med slumpmässiga värden och har formen(input_size, hidden_size), dvs.(2, 2).b1är en TensorFlow-variabel som initieras med nollor och har formen(hidden_size), dvs.(2);W2ochb2: vikterna (W2) och bias (b2) för kopplingarna från det dolda lagret till utmatningslagret.W2initieras med slumpmässiga värden och har formen(hidden_size, output_size), dvs.(2, 1).b2initieras med nollor och har formen(output_size), dvs.(1).
Träningsfunktion
train_step(): detta är den centrala träningsfunktionen. Den användertf.GradientTape()för automatisk differentiering. I framåtriktad passering beräknas aktiveringar i det dolda lagret (a1) och utmatningsprediktionerna (Y_pred). Förlusten beräknas som Mean Squared Error mellanY_predochY. Funktionen beräknar sedan gradienterna och uppdaterar vikter och bias;tf.sigmoid(): en sigmoid-aktiveringsfunktion används, som transformerar indata till ett värde mellan0och1. Detta används för både det dolda lagret och utmatningslagret.
Träningsloop
- Nätverket tränas i
2500epoker. Vid varje epok anropas funktionentrain_step()och vikterna uppdateras. Förlusten skrivs ut var500epok för att övervaka träningsprocessen.
Slutsats
Eftersom XOR-funktionen är en relativt enkel uppgift behövs inte avancerade tekniker som hyperparameterjustering, datasplittring eller att bygga komplexa datapipelines i detta skede. Denna övning är bara ett steg mot att bygga mer sofistikerade neurala nätverk för verkliga tillämpningar.
Att behärska dessa grunder är avgörande innan du går vidare till avancerade tekniker för konstruktion av neurala nätverk i kommande kurser, där vi kommer att använda Keras-biblioteket och utforska metoder för att förbättra modellkvaliteten med TensorFlows omfattande funktioner.
Tack för dina kommentarer!
single
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal