手擼機器學習系列之 神經網路前向傳播

2021-10-09 16:00:41 字數 4455 閱讀 8901

首先載入庫

import numpy as np

import scipy.io as sio

import matplotlib.pyplot as plt

接著匯入資料

data=sio.loadmat(

"ex3data1.mat"

)type

(data)

dict
可知 data 是乙個 dict , 我們看下他有哪些東西

data.keys(

)

dict_keys(['__header__', '__version__', '__globals__', 'x', 'y'])
獲取原始資料 raw_x 和 raw_y

raw_x=data[

'x']

raw_y=data[

'y']

raw_x.shape,raw_y.shape

((5000, 400), (5000, 1))
raw_y 是乙個二維陣列, 我們將其變為一維陣列

y=raw_y.flatten(

)y.shape

(5000,)
現在得到了 raw_x 和 y,為了方便,我們將其變為 x,y

x=raw_x

y=y

x.shape,y.shape
((5000, 400), (5000,))
theta = sio.loadmat(

'ex3weights.mat'

)type

(theta)

dict
# 檢視其資料

theta.keys(

)

dict_keys(['__header__', '__version__', '__globals__', 'theta1', 'theta2'])
# 獲取資料

theta1=theta[

'theta1'

]theta2=theta[

'theta2'

]theta1.shape,theta2.shape

((25, 401), (10, 26))
# 定義 sigmod

defsigmoid

(z):

return1/

(1+np.exp(

-z))

神經網路是這樣:[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-b39haxog-1600692167001)(attachment:%e5%9b%be%e7%89%87.png)]

# 先計算輸入層. 輸入層比較簡單,就是原始資料

a1=x

維度:

x: (5000, 400)

theta1: (25, 401)

在 x 的首列插入全 1

x=np.insert(raw_x,

0,values=

1,axis=1)

x.shape,theta1.shape

((5000, 401), (25, 401))
# 計算 a2

a2=sigmoid([email protected])

a2.shape,theta2.shape

((5000, 25), (10, 26))
# 接著計算 a3 輸出

a2_t=np.insert(a2,

0,values=

0,axis=1)

a2_t.shape

(5000, 26)
a3=sigmoid([email protected])

a3.shape

(5000, 10)
pre_res=np.argmax(a3,axis=1)

+1pre_res.shape

(5000,)
# 看下準確率

acc=[1

if a==b else

0for

(a,b)

inzip

(y,pre_res)

]acc=np.

sum(acc)

/len

(y)acc

0.976
fig,ax=plt.subplots(ncols=

10,nrows=

10,figsize=(10

,10),sharex=

true

,sharey=

true

)image_indexs=np.random.choice(

len(raw_x)

,100

)images=raw_x[image_indexs,:]

# 配合 sharex=true,sharey=true 隱藏座標

plt.xticks(

)plt.yticks(

)# 注意,0 = 10

for i in

range(10

):for j in

range(10

):f_index=i*

10+j

ax[i,j]

.imshow(images[f_index]

.reshape((20

,20))

.t)# pre_num[image_indexs[f_index]] 為的**值

把 a2 繪製出來看看

fig,ax=plt.subplots(ncols=

10,nrows=

10,figsize=(10

,10),sharex=

true

,sharey=

true

)image_indexs=np.random.choice(

len(raw_x)

,100

)images=a2[image_indexs,:]

# 配合 sharex=true,sharey=true 隱藏座標

plt.xticks(

)plt.yticks(

)# 注意,0 = 10

for i in

range(10

):for j in

range(10

):f_index=i*

10+j

ax[i,j]

.imshow(images[f_index]

.reshape((5

,5))

.t)# pre_num[image_indexs[f_index]] 為的**值

a2 就是學到的特徵,其實我們看不出啥

機器學習之神經網路

機器學習是一門致力於研究如何通過計算的手段,利用經驗來改善系統自身的效能。經驗通常以資料的形式存在,因此機器學習所研究的主要內容是關於在計算機上從資料中產生 模型 的演算法,即 學習演算法 有了學習演算法,將經驗資料提供給它,它就能基於這些資料產生模型 當面對新情況時,模型會給我們提供相應的判斷。一...

機器學習之神經網路NN

神經網路 neural network 以人腦中的神經網路為啟發而產生的,最著名對的演算法是backpropagation bp 演算法。可用來解決分類問題,也可用來解決回歸問題 詳情見前言 多層向前神經網路中使用了bp演算法 多層向前神經網路的組成,每一層由單元組成 圖中小圈圈 輸入層 由訓練集的...

python機器學習之神經網路 三

來自 前面兩篇文章都是參考書本神經網路的原理,一步步寫的 這篇博文裡主要學習了如何使用neurolab庫中的函式來實現神經網路的演算法。首先介紹一下neurolab庫的配置 neurolab需要採用python安裝第三方軟體包的方式進行安裝,這裡介紹一種安裝方式 1 進入cmd視窗 2 進入解壓檔案...