python:深度学习中用BP神经网络解决异或问题

在这里插入图片描述
***1.***导入安装包

import numpy as np

***2.***定义激活函数及其导数

#激活函数
def tanh(x):
    return np.tanh(x)
#激活函数导数
def tanh_prize(z):
    return 1-tanh(z)**2

或者:

def sigmoid(x):
      return 1/(1+np.exp(-x))
  
#sigmoid导函数性质:f'(t) = f(x)(1 - f(x))
def s_prime(z):
      return np.multiply(sigmoid(z), 1.0-sigmoid(z))

***3.***输入输出数据

#输入数据
x=np.array([[1,0,0],[1,0,1],[1,1,0],[1,1,1]])
#理想输出数据
y=np.array([[0,1,1,0]]).T #或y=np.array([[0],[1],[1],[0]])

***4.***权重及学习率

#输入-隐藏1层权重
w1=2*np.random.random((3,3))-1
#隐藏1-隐藏2层权重
w2=2*np.random.random((3,3))-1
#隐藏2-输出层权重
w3=2*np.random.random((3,1))-1
#学习率 改变后训练后的输出变化
lr=0.5

***5.***正反向传播计算

for i in range(20000):
    #正向传播
    L1=np.dot(x,w1)
    z1=tanh(L1)
    L2=np.dot(z1,w2)
    z2=tanh(L2)
    L3=np.dot(z2,w3)
    z3=tanh(L3)
    
    error=y-z3#误差
    if(i%2000) == 0:#每2000次查看一次
       print("error:"+str(np.mean(error)))#打印误差
    
    #逆向传播
    L3_delta=error*tanh_prize(z3)#=(理想输出-实际输出)*z3经过激活函数导数
    L2_delta=L3_delta.dot(w3.T)*tanh_prize(z2)#=下层误差*层间权值*z2经过激活函数的导数
    L1_delta=L2_delta.dot(w2.T)*tanh_prize(z1)#=下层误差*层间权值*z1经过激活函数的导数
    
    #权重更新
    w3+=lr*z2.T.dot(L3_delta)
    w2+=lr*z1.T.dot(L2_delta)
    w1+=lr*x.T.dot(L1_delta)

6.打印训练输出

print("训练输出:")
print(z3)

7.判决输出

def judge(x):
    if(x>=0.5):
       return 1
    else:
       return 0
#根据提供的函数对指定序列做映射 map(函数,一个或多个序列)
print("判决结果:")
for i in map(judge,z3):
    print(i)

8.运行结果
在Spyder中运行结果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值