import numpy as np
def sigmoid(x,deriv = False):#激活函数,方位标志
if(deriv ==True):#反向传播返回导数
return x*(1-x)#现在的x为被激活之后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)
y=np.array([[0],
[1],
[1],
[0],
[0]])#label
print(y.shape)
np.random.seed(1)
#有监督的算法,要定义y
w0 =2*np.random.random((3,4))-1#3行四列3个特征,l1有4个神经元/-1——1之间的随机数
w1 = 2*np.random.random((4,1))-1#输出值唯一
print(w0)
for j in range(5):
l0=x
l1=sigmoid(np.dot(l0,w0))
l2=sigmoid(np.dot(l1,w1))
l2_error = y-l2
print(l2_error.shape)
if (j%100000)==0:#打印当前误差值
print('Error'+str(np.mean(np.abs(l2_error))))
l2_delta =l2_error*sigmoid(l2,deriv =True) #对应相乘,每个样本的值。错的越多,更新的越大
print(l2_delta.shape)
l1_error = l2_delta.dot(w1.T)
l1_delta = l1_error * sigmoid(l1,deriv =True)
w1 +=l1.T.dot(l2_delta)#点乘上一层的误差,w1对l2产生的误差
w1 +=l0.T.dot(l1_delta)
神经网络--假期---2020.2.12----神经网络源码
最新推荐文章于 2022-08-07 22:11:51 发布