简易神经网络代码测试

import numpy as np  
  
#非线性sigmoid 函数    
def sigmoid(x):
    return 1.0/(1.0+np.exp(-x))

#sigmoid 函数的导数
def dsigmoid(y):
    return y * (1 - y)
      
X = np.array([[1,1,0],  
            [1,0,1],  
            [0,1,0],  
            [0,1,1]]) 
                  
y = np.array([[0],  
            [1],
            [0],
            [1]])  

# 初始化权重值 
np.random.seed(1) 
w0 = 2*np.random.random((3,4)) - 1  
w1 = 2*np.random.random((4,1)) - 1

print("x.shape=",X.shape) 
print("y.shape=",y.shape)
print("w0.shape=",w0.shape)
print("w1.shape=",w1.shape)

print("++++++++++ start +++++++++++")
for i in range(200):  
        # 三层网络
        L0 = X
        L1 = sigmoid(np.dot(L0,w0)) # 4行3列 * 3行4列 = 4行4列
        L2 = sigmoid(np.dot(L1,w1)) # 4行4列 * 4行1列 = 4行1列

        # 反向传播
        L2_loss = y - L2            
        L2_delta = L2_loss * dsigmoid(L2)  
        L1_loss = L2_delta.dot(w1.T)  
        L1_delta = L1_loss * dsigmoid(L1)  

        # 修改权重
        w1 += L1.T.dot(L2_delta)  
        w0 += L0.T.dot(L1_delta)  
    
        if (i% 20) == 0:  
            print('L2=\n',L2)
            print("loss:" + str(np.mean(np.abs(L2_loss))))  

结果:

x.shape= (4, 3)
y.shape= (4, 1)
w0.shape= (3, 4)
w1.shape= (4, 1)
++++++++++ start +++++++++++
L2=
 [[ 0.52285196]
 [ 0.54384086]
 [ 0.46307467]
 [ 0.48895696]]
loss:0.488282204733
L2=
 [[ 0.43087433]
 [ 0.7261144 ]
 [ 0.37317214]
 [ 0.5975844 ]]
loss:0.370086916587
L2=
 [[ 0.20177665]
 [ 0.87495685]
 [ 0.20840768]
 [ 0.75482148]]
loss:0.195101498689
L2=
 [[ 0.11297297]
 [ 0.92818356]
 [ 0.1413619 ]
 [ 0.84438893]]
loss:0.120440593708
L2=
 [[ 0.0787109 ]
 [ 0.94872581]
 [ 0.11005604]
 [ 0.88313687]]
loss:0.089226065843
L2=
 [[ 0.06128527]
 [ 0.95938241]
 [ 0.09196822]
 [ 0.9042201 ]]
loss:0.0724127449157
L2=
 [[ 0.05076403]
 [ 0.96593555]
 [ 0.080062  ]
 [ 0.91759667]]
loss:0.0618234525323
L2=
 [[ 0.04369948]
 [ 0.97040169]
 [ 0.07154877]
 [ 0.92693377]]
loss:0.0544781972979
L2=
 [[ 0.03860816]
 [ 0.97365931]
 [ 0.06510925]
 [ 0.9338786 ]]
loss:0.0490448764646
L2=
 [[ 0.03475039]
 [ 0.97615208]
 [ 0.06003704]
 [ 0.93928146]]
loss:0.044838470162



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值