構造一個單層網絡,激活函數是sigmoid,損失函數是均方根。
參數w0和b0,輸入X,輸入層L0,輸出層L1,預測值Y,lr(n)學習速率
python如下:
import numpy as np
# sigmoid function
def sig(x):
return (1/(1+np.exp(-x)))
def deridig(y):
return y*(1-y)
# input dataset
X = np.array([ [0,0,1],
[0,1,1],
[1,0,1],
[1,1,1] ])
# output dataset
y = np.array([[0,0,1,1]]).T
#
np.random.seed(1)
# initialize weights randomly with mean 0
w0 = 2*np.random.random((3,1)) - 1
b0=1
lr=1
print ('w000',w0)
for iter in range(10000):
# forward propagation
l0 = X
l1 = sig(np.dot(l0,w0)+b0)
#print ('l1',l1)
# how much did we miss?
E_error=(y-l1)*(y-l1)
# update weights
w0 += 1*np.dot(l0.T,2*(y-l1) *deridig(l1))
b0 += 1*2*(y-l1) *deridig(l1)
#print ('w0',w0)
print ("Output After Training:")
print (l1)
print ("w0 After Training:")
print (w0)
print ("b0 After Training:")
print (b0)
循環10000次後的結果:
Output After Training:
[[ 0.00411501]
[ 0.00384688]
[ 0.99675082]
[ 0.99643784]]
w0 After Training:
[[ 5.05661648]
[-0.2814999 ]
[-2.84714308]]
b0 After Training:
[[-2.64189825]
[-2.42804605]
[ 3.51667531]
[ 3.70589715]]