神經網路系列目錄:
神經網路①——神經網路原理介紹(bp演算法)
神經網路③——sklearn引數介紹及應用
神經網路實戰④——主播綜合評分回歸**實戰
最小二乘法&梯度下降法區別及python實現
本篇博文通過python**實現神經網路,採用sklearn自帶的手寫數字集,看分類情況如何
一、匯入資料集並標準化
資料集的載入非常簡單,直接呼叫load_digits即可,常用到的資料有:
digits.data:手寫數字特徵向量資料集,每乙個元素都是乙個64維的特徵向量。
digits.target:特徵向量對應的標記,每乙個元素都是自然是0-9的數字。
digits.images:對應著data中的資料,每乙個元素都是8*8的二維陣列,其元素代表的是灰度值,轉化為以為是便是特徵向量
# python實現神經網路
from sklearn.model_selection import train_test_split
import numpy as np
from sklearn.preprocessing import standardscaler
from sklearn.datasets import load_digits
import matplotlib.pyplot as plt
import seaborn as sns
#匯入資料集(dataset自帶的手寫數字資料集)
data = load_digits()
print(data.images.shape)
x = data.data
y = data.target
print(x.shape,x[:2])
print(y.shape,y[:2])
stander = standardscaler() # 特徵值進行標準化,得到均值為0,方差為1的分布
x = stander.fit_transform(x)
print(np.unique(y,return_counts=true)) # 輸出每一種類別及類別的數量
將資料拆分成80%的訓練集和20%的測試集
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2)
print(x_train.shape)
print(y_train.shape,y_train)
print(y_test.shape)
v = np.random.random((64, 100))*2-1 # 輸入層到隱藏層的權重矩陣,範圍0~1
w = np.random.random((100,10))*2-1 # 隱藏層到輸出層的權重矩陣,範圍0~1
# 啟用函式sigmoid函式
def sigmond(x):
return 1/(1+ np.exp(-x))
# sigmoid函式的導數
def sigmondf(x):
return x*(1-x)
# **函式
def predict(x):
l1 = sigmond(np.dot(x, v))
l2 = sigmond(np.dot(l1, w))
return l2
# 神經網路分類器
def network(x, y, steps=10000):
global w,v # 定義全域性變數
acc_list =
for lt in list(np.linspace(0.001,0.01,100)):
acc_0 = 0
for n in range(steps+1):
i = np.random.randint(x.shape[0])
x = x[i] # 這是乙個一維的矩陣,(64,)
x = np.atleast_2d(x) # atlease_xd變成幾維,如果是2,則是2維,如果是3,就變成3維,,,
l1 = sigmond(np.dot(x,v)) # 得到乙個(1,100)的矩陣
l2 = sigmond(np.dot(l1,w)) # 得到乙個(1,10)的矩陣
l2_delta = (y[i] - l2)*sigmondf(l2) # 輸出節點的殘差: -(輸出值-樣本值)* 啟用函式導數 (1,10)
l1_delta = np.dot(l2_delta,w.t)*sigmondf(l1) # 隱藏層的殘差:右側輸出層的殘差加權求和*隱藏層的導數 (1,10)(10,100)=(1,100)
w += lt*np.dot(l1.t,l2_delta) # 隱藏層更新權重:(100,1)*(1,10)=(100,10)
v += lt*np.dot(x.t,l1_delta) # 輸入層更新權重:(64,1)*(1,100)=(64,100)
if n%1000 == 0: # 取餘,如果迭代達到1000的倍數
predict_ = predict(x_test)
predictions = np.argmax(predict_, axis=1) # 每一行最大值的下標,對於多分類,輸出值最大的即為分類結果
acc = np.mean(np.equal(predictions, y_test)) # np.equal是判斷是否相等,相等的變為true,不相等的就變為false,然後計算均值
if acc>acc_0:
acc_0 = acc
# print('第{}次'.format(n)+' '+ '平均準確率:', acc)
跑出來準確率不高,於是不斷替換學習率,發現最高的也僅能達到13%,嘗試對初始權重進行調整,也沒有太大的變化,不過本篇主要的目的就是想用python實現神經網路,對於分類的準確度倒在其次,後續打算會用sklearn庫封裝的神經網路試試看。
bp神經網路matlab 神經網路有哪些網路
深度學習,人工智慧,神經網路這些概念往往令初學者頭疼不已,這裡列出其基礎概念的歸納總結,幫助小白入坑,共同學習。人工神經網路 artificial neural network,ann 是一種模擬生物神經網路的結構和功能的數學模型或計算模型。神經網路與小波分析 混沌 粗糙理論 分形理論的融合。194...
神經網路 卷積神經網路
這篇卷積神經網路是前面介紹的多層神經網路的進一步深入,它將深度學習的思想引入到了神經網路當中,通過卷積運算來由淺入深的提取影象的不同層次的特徵,而利用神經網路的訓練過程讓整個網路自動調節卷積核的引數,從而無監督的產生了最適合的分類特徵。這個概括可能有點抽象,我盡量在下面描述細緻一些,但如果要更深入了...
神經網路 卷積神經網路
1.卷積神經網路概覽 來自吳恩達課上一張,通過對應位置相乘求和,我們從左邊矩陣得到了右邊矩陣,邊緣是白色寬條,當畫素大一些時候,邊緣就會變細。觀察卷積核,左邊一列權重高,右邊一列權重低。輸入,左邊的部分明亮,右邊的部分灰暗。這個學到的邊緣是權重大的寬條 都是30 表示是由亮向暗過渡,下面這個圖左邊暗...