Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Skapa ett Neuronnätslager | Grunderna i TensorFlow
Introduktion till Tensorflow
Avsnitt 3. Kapitel 1
single

single

Skapa ett Neuronnätslager

Svep för att visa menyn

Enskilt neuronnätslager

I ett grundläggande feed-forward neuronnät beräknas utgången från en neuron i ett lager med hjälp av den viktade summan av dess indata, som sedan passerar genom en aktiveringsfunktion. Detta kan representeras som:

y=σ(Wx+b)y=\sigma(W \cdot x + b)

Där:

  • yy: utdata från neuronen;
  • WW: en matris som representerar vikterna kopplade till neuronen;
  • xx: en kolumnmatris (eller vektor) som representerar indatavärdena till neuronen;
  • bb: ett skalärt värde;
  • σ\sigma: en aktiveringsfunktion, såsom sigmoid, ReLU eller softmax.

För bästa prestanda utförs alla beräkningar med matriser. Vi kommer att hantera denna uppgift på samma sätt.

carousel-imgcarousel-imgcarousel-imgcarousel-imgcarousel-img
Uppgift

Svep för att börja koda

Givet vikter, indata och bias för ett enda neuronskikt, beräkna dess utdata med hjälp av matrismultiplikation och sigmoid-aktiveringsfunktionen. Tänk på ett lager med 3 indata och 2 neuroner, där en enda batch innehåller endast ett prov.

  1. Bestämning av former:

    • Formen på inmatningsmatrisen I ska ha sin första dimension som representerar antalet prover i batchen. Givet ett prov med 3 indata blir dess storlek 1x3;
    • Viktmatrisen W ska ha sina kolumner som representerar indata-vikter för varje neuron. För 2 neuroner med 3 indata är den förväntade formen 3x2. Detta är inte fallet, så du behöver transponera viktmatrisen för att uppnå önskad form.
  2. Matrismultiplikation:

    • Med matriserna i rätt form, utför matrismultiplikationen;
    • Kom ihåg att vid matrismultiplikation härleds utdata från skalärprodukten av varje rad i den första matrisen med varje kolumn i den andra matrisen. Se till att multiplicera i rätt ordning.
  3. Biasaddition:

    • Utför helt enkelt en elementvis addition av resultatet från matrismultiplikationen med bias.
  4. Tillämpning av aktivering:

    • Använd sigmoid-aktiveringsfunktionen på resultatet från biasaddition för att få neuronens utdata;
    • TensorFlow tillhandahåller sigmoidfunktionen som tf.sigmoid().

Observera

I slutet av kursen kommer vi att fördjupa oss i att implementera ett komplett feed-forward-nätverk med TensorFlow. Denna övning lägger grunden för det.

Lösning

Kodbeskrivning
expand arrow

Definiera lagervikter, lagerindata och lagerbias

Här definierar vi vikterna, indata och bias för lagret. Vi använder tf.Variable() för vikter och bias eftersom dessa är träningsbara parametrar i neuronnät, och tf.constant() för indata eftersom det förblir oförändrat under träningen. dtype=tf.float64 anges för bästa precision.

W = tf.Variable([[0.5, 0.4, 0.7], [0.1, 0.9, 0.5]], dtype=tf.float64)

Detta är viktmatrisen för neuronnätlagret. Varje rad representerar vikterna för en neuron med avseende på varje indata.

I = tf.constant([[0.5, 0.6, 0.1]], dtype=tf.float64)

Detta är indatamatrisen, som representerar ett enskilt exempel med 3 egenskaper.

b = tf.Variable(0.1, dtype=tf.float64)

Detta är biasvärdet. Det är en skalär som adderas till den viktade summan innan den passerar genom aktiveringsfunktionen.

W = tf.transpose(W)

Vikterna är organiserade i rader, men för matrismultiplikation bör de vara i kolumner. Därför transponeras matrisen. Efter detta motsvarar första kolumnen vikterna för den första neuronen och andra kolumnen för den andra neuronen.

weighted_sum = tf.matmul(I, W)

Här beräknar vi matrismultiplikationen av indata och den transponerade viktmatrisen. Detta ger oss den viktade summan av indatan.

Låt oss gå igenom denna matrismultiplikation steg för steg:

Bestäm formen på resultatmatrisen:

Resultatmatrisen kommer att ha antalet rader från den första matrisen (matris I med form 1x3) och antalet kolumner från den andra matrisen (matris W med form 3x2). Således kommer resultatmatrisen att ha formen 1x2.

Matrismultiplikationsprocess:

För det första elementet i resultatmatrisen (vi kallar det S[0][0] för "weighted sum"):

  • Multiplicera första elementet i första raden i matris I med första elementet i första kolumnen i matris W: 0.5 * 0.5 = 0.25;
  • Multiplicera andra elementet i första raden i matris I med andra elementet i första kolumnen i matris W: 0.6 * 0.4 = 0.24;
  • Multiplicera tredje elementet i första raden i matris I med tredje elementet i första kolumnen i matris W: 0.1 * 0.7 = 0.07;
  • Summera dessa produkter: 0.25 + 0.24 + 0.07 = 0.56.

Alltså är S[0][0] 0.56.

För det andra elementet i resultatmatrisen (S[0][1]):

  • Multiplicera första elementet i första raden i matris I med första elementet i andra kolumnen i matris W: 0.5 * 0.1 = 0.05;
  • Multiplicera andra elementet i första raden i matris I med andra elementet i andra kolumnen i matris W: 0.6 * 0.9 = 0.54;
  • Multiplicera tredje elementet i första raden i matris I med tredje elementet i andra kolumnen i matris W: 0.1 * 0.5 = 0.05;
  • Summera dessa produkter: 0.05 + 0.54 + 0.05 = 0.64.

Alltså är S[0][1] 0.64.

Så resultatmatrisen S från multiplikationen av matris I och matris W är:

[ [0.56, 0.64] ]
biased_sum = weighted_sum + b

Biasen adderas till den viktade summan. Detta är en form av affin transformation som förskjuter resultatet för att uppnå bättre anpassning under träningen.

neuron_output = tf.sigmoid(biased_sum)

Sigmoidfunktionen trycker ihop värdet mellan 0 och 1, vilket säkerställer att vår utdata är inom ett normaliserat intervall. Den används ofta vid binära klassificeringsproblem.

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 1
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