神經網路 python實現神經網路

2021-09-24 22:54:01 字數 3558 閱讀 1149

神經網路系列目錄

神經網路①——神經網路原理介紹(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 表示是由亮向暗過渡,下面這個圖左邊暗...