Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Implementering av neurala nätverk | Grunderna i TensorFlow
Introduktion till Tensorflow

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.

single_neuron_calc

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:

  1. Multiplicera lagrets indata med dess vikter.
  2. Lägg till en bias till resultatet.
  3. Applicera en aktiveringsfunktion på denna summa.
carousel-imgcarousel-imgcarousel-imgcarousel-imgcarousel-img

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.

carousel-imgcarousel-imgcarousel-img

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.

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 3. Kapitel 4
single

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.

single_neuron_calc

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:

  1. Multiplicera lagrets indata med dess vikter.
  2. Lägg till en bias till resultatet.
  3. Applicera en aktiveringsfunktion på denna summa.
carousel-imgcarousel-imgcarousel-imgcarousel-imgcarousel-img

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.

carousel-imgcarousel-imgcarousel-img

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.

Uppgift

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.

  1. 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_size och output_size för att definiera lämpliga former för dessa tensorer.
  2. Använd en funktionsdekoratör för att omvandla funktionen train_step() till en TensorFlow graf.
  3. Utför framåtriktad propagiering genom både det dolda och utgångslagret i nätverket. Använd sigmoid-aktiveringsfunktion.
  4. 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.
  5. Justera vikter och biaser baserat på deras respektive gradienter. Inkludera learning_rate i denna justeringsprocess för att styra omfattningen av varje uppdatering.

Lösning

Kodbeskrivning
expand arrow

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

  • W1 och b1: 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);
  • W2 och b2: vikterna (W2) och bias (b2) för kopplingarna från det dolda lagret till utmatningslagret. W2 initieras med slumpmässiga värden och har formen (hidden_size, output_size), dvs. (2, 1). b2 initieras med nollor och har formen (output_size), dvs. (1).

Träningsfunktion

  • train_step(): detta är den centrala träningsfunktionen. Den använder tf.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 mellan Y_pred och Y. Funktionen beräknar sedan gradienterna och uppdaterar vikter och bias;
  • tf.sigmoid(): en sigmoid-aktiveringsfunktion används, som transformerar indata till ett värde mellan 0 och 1. Detta används för både det dolda lagret och utmatningslagret.

Träningsloop

  • Nätverket tränas i 2500 epoker. Vid varje epok anropas funktionen train_step() och vikterna uppdateras. Förlusten skrivs ut var 500 epok 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.

Switch to desktopByt till skrivbordet för praktisk övningFortsätt där du är med ett av alternativen nedan
Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 3. Kapitel 4
single

single

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

some-alt