*05 ***** 例子:前饋
我們繼續(xù)用前面圖中的網(wǎng)絡(luò),假設(shè)每個(gè)神經(jīng)元的權(quán)重都是 ,截距項(xiàng)也相同 ,激活函數(shù)也都是S型函數(shù)。分別用,表示相應(yīng)的神經(jīng)元的輸出。
當(dāng)輸入時(shí),會(huì)得到什么結(jié)果?
這個(gè)神經(jīng)網(wǎng)絡(luò)對(duì)輸入的輸出是0.7216,很簡(jiǎn)單。
一個(gè)神經(jīng)網(wǎng)絡(luò)的層數(shù)以及每一層中的神經(jīng)元數(shù)量都是任意的。基本邏輯都一樣:輸入在神經(jīng)網(wǎng)絡(luò)中向前傳輸,最終得到輸出。接下來(lái),我們會(huì)繼續(xù)使用前面的這個(gè)網(wǎng)絡(luò)。
***06 ***編碼神經(jīng)網(wǎng)絡(luò):前饋
接下來(lái)我們實(shí)現(xiàn)這個(gè)神經(jīng)網(wǎng)絡(luò)的前饋機(jī)制,還是這個(gè)圖:
import numpy as np
# ... code from previous section here
classOurNeuralNetwork:
'''
A neural network with:
- 2 inputs
- a hidden layer with 2 neurons (h1, h2)
- an output layer with 1 neuron (o1)
Each neuron has the same weights and bias:
- w = [0, 1]
- b = 0
'''
def__init__(self):
weights = np.array([0, 1])
bias = 0
# 這里是來(lái)自前一節(jié)的神經(jīng)元類(lèi)
self.h1 = Neuron(weights, bias)
self.h2 = Neuron(weights, bias)
self.o1 = Neuron(weights, bias)
deffeedforward(self, x):
out_h1 = self.h1.feedforward(x)
out_h2 = self.h2.feedforward(x)
# o1的輸入是h1和h2的輸出
out_o1 = self.o1.feedforward(np.array([out_h1, out_h2]))
return out_o1
network = OurNeuralNetwork()
x = np.array([2, 3])
print(network.feedforward(x)) # 0.7216325609518421
結(jié)果正確,看上去沒(méi)問(wèn)題。
***07 ***訓(xùn)練神經(jīng)網(wǎng)絡(luò) 第一部分
現(xiàn)在有這樣的數(shù)據(jù):
接下來(lái)我們用這個(gè)數(shù)據(jù)來(lái)訓(xùn)練神經(jīng)網(wǎng)絡(luò)的權(quán)重和截距項(xiàng),從而可以根據(jù)身高體重預(yù)測(cè)性別:
我們用0和1分別表示男性(M)和女性(F),并對(duì)數(shù)值做了轉(zhuǎn)化:
我這里是隨意選取了135和66來(lái)標(biāo)準(zhǔn)化數(shù)據(jù),通常會(huì)使用平均值。
***08 ***損失
在訓(xùn)練網(wǎng)絡(luò)之前,我們需要量化當(dāng)前的網(wǎng)絡(luò)是『好』還是『壞』,從而可以尋找更好的網(wǎng)絡(luò)。這就是定義損失的目的。
我們?cè)谶@里用平均方差(MSE)損失: ,讓我們仔細(xì)看看:
- 是樣品數(shù),這里等于4(Alice、Bob、Charlie和Diana)。
- 表示要預(yù)測(cè)的變量,這里是性別。
- 是變量的真實(shí)值(『正確答案』)。例如,Alice的就是1(男性)。
- 變量的預(yù)測(cè)值。這就是我們網(wǎng)絡(luò)的輸出。
被稱(chēng)為方差(squared error)。我們的損失函數(shù)就是所有方差的平均值。預(yù)測(cè)效果越好,損失就越少。
更好的預(yù)測(cè) = 更少的損失!
訓(xùn)練網(wǎng)絡(luò) = 最小化它的損失。
*09 ***** 損失計(jì)算例子
假設(shè)我們的網(wǎng)絡(luò)總是輸出0,換言之就是認(rèn)為所有人都是男性。損失如何?
***10 ***代碼:MSE損失
下面是計(jì)算MSE損失的代碼:
import numpy as np
defmse_loss(y_true, y_pred):
# y_true and y_pred are numpy arrays of the same length.
return ((y_true - y_pred) ** 2).mean()
y_true = np.array([1, 0, 0, 1])
y_pred = np.array([0, 0, 0, 0])
print(mse_loss(y_true, y_pred)) # 0.5
如果你不理解這段代碼,可以看看NumPy的快速入門(mén)中關(guān)于數(shù)組的操作。
好的,繼續(xù)。
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4771瀏覽量
100715 -
神經(jīng)元
+關(guān)注
關(guān)注
1文章
363瀏覽量
18449 -
python
+關(guān)注
關(guān)注
56文章
4792瀏覽量
84628
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論