github部落格傳送門
csdn部落格傳送門
numpy
matplotlib
深度學習基礎網路模型(mnist手寫體識別資料集)
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(1, 100, 100) # 造出一些100個偽資料 範圍在 1,100之間
y = 2 * x + np.random.randn(*x.shape) * 10 # 將x資料乘以2 再加上一些噪點
step = 0.00001 # 學習率 步長
diff = [0, 0] # 梯度
cnt = 0 # 計數
b = 0 # b值初始化
w = 0 # w值初始化
error0 = 0 # 第一次誤差
error1 = 0 # 下一次誤差
epsilon = 0.000001 # 兩次誤差差值
def h(ax):
return w * ax + b # 定義乙個主函式
while true:
# cnt = cnt+1 # 計數 檢視訓練了多少次
diff = [0, 0]
for i in range(len(x)): # 遍歷ax資料個數這麼多次
diff[0] += h(x[i]) - y[i] # **的y值 減去 原本的y的值 求和
diff[1] += (h(x[i]) - y[i]) * x[i] # **的y值 減去 原本的y值 乘以x的值 求和
b = b - step / len(x) * diff[0] # 更新b值 現在的 b 值 減去 學習率/x的個數*diff[0]的梯度
w = w - step / len(x) * diff[1] # 更新w值 現在的 w 值 減去 學習率/x的個數*diff[1]的梯度
error1 = 0 # 重置本次擬合誤差為 0
for i in range(len(x)): # 計算本次 擬合誤差
error1 += (y[i] - (b + w * x[i])) ** 2 / 2 # 均方差
if abs(error1 - error0) < epsilon: # 如果 本次擬合誤差 與 上次擬合誤差 小於設定閾值 則可跳出擬合迴圈
break # 跳出整個 擬合迴圈網路
else:
error0 = error1 # 否則將 本次誤差賦給 error0 以便下次迴圈擬合誤差相比較
plt.ion() # 開啟動態畫圖
plt.clf() # 清除畫板上的圖
plt.plot(x, [h(x) for x in x]) # 畫出原本的x值 和 **的y值 **線
plt.plot(x, y, 'bo') # 再畫出 原本的x, y對應的點(樣本)
print(w, b) # 列印出當前訓練好的 w, b 的值
plt.pause(0.1) # 暫停 0.1 秒
plt.ioff() # 關閉所有畫板
Python簡單實現BP演算法
啟用函式為relu函式 import numpy as np n 64 樣本數 d in 1000 輸入維度 h 100 隱藏層維度 d out 10 輸出維度 隨機建立一些訓練資料 x np.random.randn n,d in y np.random.randn n,d out 隨機初始權重 ...
Kmeans演算法手動實現
背景 平面上有兩堆資料 資料以 x,y 的二維座標形式表示 目標是找出兩堆資料的中心點 隨機生成兩個點作為兩堆資料的中心點 計算所有點分別到兩個中心點的距離 對於平面的每乙個點,比較到哪乙個中心點的距離近,就被歸為哪一類 對於歸類後的資料重新計算中心點的座標 判斷中心點是否有明顯變化,如果有,跳轉到...
BP神經網路演算法實現
bp神經網路演算法實現 include include include include define nh 3 輸入層 define ni 4 隱層 define nj 1 輸出層 define nk 100 樣本容量 define test 70 測試集容量 define nr 0.7 學習效率 ...