8 神經網路

2021-10-12 08:45:39 字數 1733 閱讀 2442

'''

**手寫數字

使用多類logistic回歸不能形成更複雜的假設,因為它只是乙個線性分類器。

神經網路可以實現非常複雜的非線性的模型。

利用已經訓練好了的權重進行**。

'''import numpy as np

from scipy.io import loadmat

# 載入權重資料

defload_weight

(path)

: data = loadmat(path)

return data[

'theta1'

], data[

'theta2'

]# 載入權重資料

theta1, theta2 = load_weight(

'data/ex3weights.mat'

)# print(theta1.shape, theta2.shape) # (25, 401) (10, 26)

# 載入資料集

defload_data

(path)

: data = loadmat(path)

# loadmat讀取mat檔案

# 這裡的資料為matlab的格式,所以要使用scipy.io的loadmat函式

x = data[

'x']

y = data[

'y']

return x, y

# 載入資料集

x, y = load_data(

'data/ex3data1.mat'

)y = y.flatten(

)# 轉為一維向量

x = np.insert(x,

0, values=np.ones(x.shape[0]

), axis=1)

# np.ones(n) 返回乙個元素值全為1的n維向量

# print(x.shape, y.shape) # (5000, 401) (5000,)

# sigmoid函式

defsigmoid

(z):

return1/

(1+ np.exp(

-z))

# 神經網路計算

a1 = x # 第一層神經元

z2 = a1 @ theta1.t

z2 = np.insert(z2,0,

1, axis=1)

a2 = sigmoid(z2)

# 第二層神經元

# print(a2.shape) # (5000, 26)

z3 = a2 @ theta2.t

a3 = sigmoid(z3)

# 第三層神經元

# print(a3.shape) # (5000, 10)

# 計算準確率

y_pred = np.argmax(a3, axis=1)

+1# 按行取最大值的索引值,加一是因為索引從0開始

# print(y_pred.shape) # (5000,)

accuracy = np.mean(y_pred == y)

print

('accuracy={}%'

.format

(accuracy *

100)

)# accuracy=97.52%

執行結果:

accuracy=97.52%

Python與人工神經網路(8) 改進神經網路

話說,有沒有人想過這些引數是怎麼來的。其實我猜作者寫到這部分的時候也應該很蛋疼,因為他說是試出來的,目前這個領域的研究並沒有特別好的成果,多半靠經驗和試驗,作者就此傳授了一些經驗給我們 學習速率引數 所以學習速率,就是在隨機梯度下降演算法中下降的快慢,我們來看乙個示例圖 假設這個曲面就是成本函式,我...

曲線 神經網路 神經網路的數學基礎 8(完結)

詳細內容請閱讀 deep learning with python 中文翻譯為 python深度學習 美 弗朗索瓦 肖萊 著 張亮 譯 1 隨機梯度下降 給定乙個可微函式,理論上可以用解析法找到它的最小值 函式的最小值是導數為0 的點,因此你只需找到所有導數為0 的點,然後計算函式在其中哪個點具有最...

神經網路 卷積神經網路

這篇卷積神經網路是前面介紹的多層神經網路的進一步深入,它將深度學習的思想引入到了神經網路當中,通過卷積運算來由淺入深的提取影象的不同層次的特徵,而利用神經網路的訓練過程讓整個網路自動調節卷積核的引數,從而無監督的產生了最適合的分類特徵。這個概括可能有點抽象,我盡量在下面描述細緻一些,但如果要更深入了...