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=σ(W⋅x+b)
Där:
- y: utdata från neuronen;
- W: en matris som representerar vikterna kopplade till neuronen;
- x: en kolumnmatris (eller vektor) som representerar indatavärdena till neuronen;
- b: ett skalärt värde;
- σ: 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.





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.
-
Bestämning av former:
- Formen på inmatningsmatrisen
Iska ha sin första dimension som representerar antalet prover i batchen. Givet ett prov med 3 indata blir dess storlek1x3; - Viktmatrisen
Wska ha sina kolumner som representerar indata-vikter för varje neuron. För 2 neuroner med 3 indata är den förväntade formen3x2. Detta är inte fallet, så du behöver transponera viktmatrisen för att uppnå önskad form.
- Formen på inmatningsmatrisen
-
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.
-
Biasaddition:
- Utför helt enkelt en elementvis addition av resultatet från matrismultiplikationen med bias.
-
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
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
Imed första elementet i första kolumnen i matrisW:0.5 * 0.5 = 0.25; - Multiplicera andra elementet i första raden i matris
Imed andra elementet i första kolumnen i matrisW:0.6 * 0.4 = 0.24; - Multiplicera tredje elementet i första raden i matris
Imed tredje elementet i första kolumnen i matrisW: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
Imed första elementet i andra kolumnen i matrisW:0.5 * 0.1 = 0.05; - Multiplicera andra elementet i första raden i matris
Imed andra elementet i andra kolumnen i matrisW:0.6 * 0.9 = 0.54; - Multiplicera tredje elementet i första raden i matris
Imed tredje elementet i andra kolumnen i matrisW: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.
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