本文將會介紹神經網路的生成過程,通過生成乙個[2, 5, 3, 1]的神經網路,詳細講解每一步驟的運算過程。[2, 5, 3, 1] 表示:兩個輸入,第一層 5各神經元,第二層3個神經元,第三層 1個神經元。
#畫乙個圈
train_x, train_y = sklearn.datasets
.make_circles(n_samples=300, noise=.05)
# visualize the data
plt.scatter(train_x[:, 0], train_x[:, 1], c=train_y, s=40, cmap=plt.cm
.spectral);
我們假設輸入是乙個點(x1,y1).共有300個點,這些點隨機分布呈橢圓形。這些點組成乙個矩陣就是所有輸入引數,我們用你x表示。
這裡生成的x是乙個300*2的矩陣。如下:
對x進行轉置,得到乙個2*300的矩陣,如下
w1: 5行 2列
l = 2
w2: 3行 5列
l = 3
w3: 1行3列
"""for l in range(1, l):
parameters['w' + str(l)] = np.zeros((layers_dims[l], layers_dims[l-1]))
parameters['b' + str(l)] = 0
return parameters
#生成網路
x = train_x.t
layers_dims = [x.shape[0], 5, 3, 1] #[2, 5, 3, 1]
parameters = initialize_parameters_zeros(layers_dims)
到這裡我們將每一層的權值都初始化為零了。現在我們來分析一下現在每一層的權值詳細情況。
第一層 w1: 5*2的矩陣
b1 :5*1 列向量
第二層 w2:3*5 矩陣
b2 :3*1
第三層 w3:1*3 矩陣
b3 : 0
前向傳播計算過程
z1 = np.dot(w1, x) + b1 #w1: [5, 2] x[2, 300],矩陣乘法可乘條件:前者 列= 後者行 z1:[5,300]
a1 = relu(z1) #啟用函式
z2 = np.dot(w2, a1) + b2 #w2:[3, 5] a1[5,300] z2:[3,300]
a2 = relu(z2)
z3 = np.dot(w3, a2) + b3 #w3:[1,3] a2:[3,300] z3:[1,300]
a3 = sigmoid(z3)
cache = (z1, a1, w1, b1, z2, a2, w2, b2, z3, a3, w3, b3)
return a3, cache #a3 即是最後的記過y』值,之後根據提前期望的y值,進行誤差反向傳播。
神經網路層數與權值w 的矩陣形式有以下對應形式:
假設神經網路是 [2, 10, 20, 5, 1], 很明顯這是乙個2分類問題。
那麼 w1 就是 10*2 的矩陣 b1 : 10*1
w2: 20*10 b2: 20*1
w3: 5*20 b3: 5*1
w4: 1*5 b4: 1*1
相信規律已經很明白了。這裡w看做與神經元連線的每一條線,b看做每乙個神經元。
模糊神經網路 第41期 AI演算法 模糊神經網路
關注人工智慧教師,拓展人工智慧教育新認知 演算法在人工智慧 ai 領域非常重要,我們需要把實際問題抽象成數學問題,再讓機器對數學問題進行求解。而演算法的選擇直接導致了能否解決問題,以及以多少成本解決問題。第01期 什麼是人工智慧 第3期 圖靈測試 第5期 神經網路 第8期 機器學習 第10期 大資料...
3 線性神經網路
由於單層感知器不能解決線性不可分的問題 在上篇文章對線性可分做了解釋 如異或問題,這時我們引入了新的結構 線性神經網路。線性神經網路與單層感知器的結構相似,只是它們的啟用函式不同,單層感知器的啟用函式只能輸出兩種可能值 1 或 1 而線性神經網路的輸出可以是任何取值,其啟用函式是線性函式 y x。l...
數學 3 生成函式
生成函式是乙個比較複雜且廣泛的數學知識點,應當重點學習 首先給出一些運算公式,方便以後學習使用 texttt begin alpha f z beta g z sum alpha f n beta g n z n z mg z sum ng z n m geq0 fracz sum g z n m ...