python機器學習實現(xiàn)神經(jīng)網(wǎng)絡示例解析
單神經(jīng)元引論

對于如花,大美,小明三個因素是如何影響小強這個因素的。

這里用到的是多元的線性回歸,比較基礎
from numpy import array,exp,dot,random
其中dot是點乘
導入關系矩陣:

X= array ( [ [0,0,1],[1,1,1],[1,0,1],[0,1,1]]) y = array( [ [0,1,1,0]]).T ## T means "transposition"
為了滿足0到1的可能性,我們采用激活函數(shù)
matlab作圖
x=[-8:0.001:8]
y=1./(1+exp(-x))
plot(x,y)
grid on
text(-6,0.8,['$\frac{1}{1+e^{-x}}$'],'interpreter','latex','fontsize',25)

然后
for it in range(10000):
z=dot(X,weights)
output=1/(1+exp(-z))##'dot' play role of "dot product"
error=y-output
delta=error*output*(1-output)
weights+=dot(X.T,delta)

其中
delta=error*output*(1-output)
是求導的結果和誤差相乘,表示梯度

具體數(shù)學流程
所以具體流程如下,X具體化了一下

error即為每個帶權參數(shù)經(jīng)過激活函數(shù)映射后到y(tǒng)結果的量化距離

最終代碼:(PS:默認lr取1,可修改)
from numpy import array,exp,dot,random
"""
Created on vscode 10/22/2021
@author Squirre17
"""
X=array([[0,0,1],[1,1,1],[1,0,1],[0,1,1]])
y=array([[0,1,1,0]]).T ## T means "transposition"
random.seed(1)
epochs=10000
weights=2*random.random((3,1))-1## 3 row 1 line, range[-1,1)
for it in range(epochs):
output=1/(1+exp(-dot(X,weights)))##'dot' play role of "dot product"
error=y-output
slope=output*(1-output)
delta=error*slope
weights+=dot(X.T,delta)
print(weights)
print(1/(1+exp( -dot([[1,0,0]], weights))))
參考

多神經(jīng)元

這個意思就是兩個美女XOR
單神經(jīng)元沒法解決,只能解決單一線性關系


代碼如下,可自行調整epoches和lr
from numpy import array,exp,dot,random
"""
Created on vscode 10/22/2021
@author Squirre17
"""
X=array([[0,0,1],[0,1,1],[1,0,1],[1,1,1]])
y=array([[0,1,1,0]]).T # T means "transposition"
random.seed(1)
epochs=100000
w0=2*random.random((3,4))-1 # input layer neure
w1=2*random.random((4,1))-1 # hidden layer neure
lr=1
def fp(input):
l1=1/(1+exp(-dot(input,w0))) # 4×4
l2=1/(1+exp(-dot(l1,w1))) # 4×1
return l1,l2
def bp(l1,l2,y):
l2_error=y-l2
l2_slope=l2*(1-l2)
l1_delta=l2_error*l2_slope*lr # 4×1
l1_error=l1_delta.dot(w1.T)
l1_slope=l1*(1-l1)
l0_delta=l1_error*l1_slope*lr
return l0_delta,l1_delta
for it in range(epochs):
l0=X
l1,l2=fp(l0)
l0_delta,l1_delta=bp(l1,l2,y)
w1+=dot(l1.T,l1_delta) # 4×4 4×1 # adjust w1 according to loss
w0+=dot(l0.T,l0_delta)
print(fp([[1,0,0]])[1])
其中關于l1_error=l1_delta.dot(w1.T),就是第三層的誤差反向加權傳播給第二層

以上就是python機器學習實現(xiàn)神經(jīng)網(wǎng)絡示例解析的詳細內(nèi)容,更多關于python機器學習實現(xiàn)神經(jīng)網(wǎng)絡的資料請關注腳本之家其它相關文章!
相關文章
PyTorch中model.zero_grad()和optimizer.zero_grad()用法
這篇文章主要介紹了PyTorch中model.zero_grad()和optimizer.zero_grad()用法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06
Python異步編程入門之實現(xiàn)文件批處理的并發(fā)處理方式
本文以Python初級程序員為對象,介紹了如何使用asyncio和logging模塊實現(xiàn)一個異步批處理文件的并發(fā)處理系統(tǒng),以提高處理大量文件或數(shù)據(jù)時的效率,其中,通過配置日志系統(tǒng)記錄處理文件的日志信息,定義AsyncBatchProcessor類控制并發(fā)任務的數(shù)量2024-10-10
Facebook開源一站式服務python時序利器Kats詳解
這篇文章主要為答案及介紹了Facebook開源一站式服務python時序利器Kats的功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2021-11-11
詳解Python中 __get__和__getattr__和__getattribute__的區(qū)別
__get__、__getattr__、__getattribute都是訪問屬性的方法,但作用不太相同,這里我們就來詳解Python中 __get__和__getattr__和__getattribute__的區(qū)別:2016-06-06

