*05 ***** 例子:前饋
我們繼續用前面圖中的網絡,假設每個神經元的權重都是 ,截距項也相同 ,激活函數也都是S型函數。分別用,表示相應的神經元的輸出。
當輸入時,會得到什么結果?
這個神經網絡對輸入的輸出是0.7216,很簡單。
一個神經網絡的層數以及每一層中的神經元數量都是任意的。基本邏輯都一樣:輸入在神經網絡中向前傳輸,最終得到輸出。接下來,我們會繼續使用前面的這個網絡。
***06 ***編碼神經網絡:前饋
接下來我們實現這個神經網絡的前饋機制,還是這個圖:
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
# 這里是來自前一節的神經元類
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
結果正確,看上去沒問題。
***07 ***訓練神經網絡 第一部分
現在有這樣的數據:
接下來我們用這個數據來訓練神經網絡的權重和截距項,從而可以根據身高體重預測性別:
我們用0和1分別表示男性(M)和女性(F),并對數值做了轉化:
我這里是隨意選取了135和66來標準化數據,通常會使用平均值。
***08 ***損失
在訓練網絡之前,我們需要量化當前的網絡是『好』還是『壞』,從而可以尋找更好的網絡。這就是定義損失的目的。
我們在這里用平均方差(MSE)損失: ,讓我們仔細看看:
- 是樣品數,這里等于4(Alice、Bob、Charlie和Diana)。
- 表示要預測的變量,這里是性別。
- 是變量的真實值(『正確答案』)。例如,Alice的就是1(男性)。
- 變量的預測值。這就是我們網絡的輸出。
被稱為方差(squared error)。我們的損失函數就是所有方差的平均值。預測效果越好,損失就越少。
更好的預測 = 更少的損失!
訓練網絡 = 最小化它的損失。
*09 ***** 損失計算例子
假設我們的網絡總是輸出0,換言之就是認為所有人都是男性。損失如何?
***10 ***代碼:MSE損失
下面是計算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的快速入門中關于數組的操作。
好的,繼續。
-
神經網絡
+關注
關注
42文章
4779瀏覽量
101172 -
神經元
+關注
關注
1文章
363瀏覽量
18511 -
python
+關注
關注
56文章
4807瀏覽量
85039
發布評論請先 登錄
相關推薦
評論