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