手动完成简单的神经网络(三层)

import numpy as np
def sigmoid (x,deriv=False):
    if (deriv==True):#反向传播.x=sigmoid(x)
        return x*(1-x)
    return 1/(1+np.exp(-x))
# 输入数据
x=np.array([[0,0,1],
          [0,1,1],
          [1,0,1],
          [1,1,1],
          [0,0,1]])
print(x.shape)

在这里插入图片描述

# label
y=np.array([[0],
           [1],
           [1],
           [0],
           [0]])
print(y.shape)

在这里插入图片描述

np.random.seed(1)
# 3对应5,3 ;4代表l0有几个神经元
# 让取值再-1~+1之间
w0=2*np.random.random((3,4))-1
# 直接输出分类,只有一个分类
w1=np.random.random((4,1))
print(w0)

在这里插入图片描述


```python
for j in range(60000):
    # 前向传播
    l0=x
    # 后面还有一个激活函数层
    l1=sigmoid(np.dot(l0,w0))
    l2=sigmoid(np.dot(l1,w1))
    l2_error=y-l2
    # print(l2_error.shape)
    if (j%10000)==0:
        print('Error'+str(np.mean(np.abs(l2_error))))
        
    # 反向传播
    l2_delta=l2_error*sigmoid(l2,deriv=True)# *对应元素相乘
    # print(sigmoid(l2,deriv=True).shape)
    l1_error=l2_delta.dot(w1.T)
    # print(l2_delta.shape)
    l1_delta=l1_error*sigmoid(l1,deriv=True)
    
    # 更新w0,w1
    w1+=l1.T.dot(l2_delta)
    w0+=l0.T.dot(l1_delta)

在这里插入图片描述

发布了301 篇原创文章 · 获赞 30 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_42260102/article/details/104546224