程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

手推BP算法及python实现

发布于2020-03-31 13:15     阅读(2387)     评论(0)     点赞(28)     收藏(5)


画图和编辑公式实在是太麻烦了,我就写在纸上吧

一、BP推导

一个简单的神经网络:
在这里插入图片描述
正向传播:
1.输入层---->隐含层
在这里插入图片描述
这里我们要把得到的值通过sigmoid激活一下:
在这里插入图片描述
2.隐含层---->输出层:同理
在这里插入图片描述
这样我们就得到了输出值out(o1)和out(o2),此时这两个输出值和我们预想的输出值肯定相差甚远(可以自己设定几个数试一试)那么我们就要进行反向传播来修正w以此来修正输出值。

反向传播:
1.我们所期望的数据和输出数据的误差:
在这里插入图片描述
2.隐含层---->输出层的权值更新:
以w5为例,我们想知道w5对整体误差产生了多少影响
在这里插入图片描述
那么我们再拆分看每一项:
在这里插入图片描述
在这里插入图片描述
我们现在更新W5(lr是学习率):
在这里插入图片描述
W6,W7,W8更新同理……

3.隐含层---->隐含层的权值更新(以更新W1为例):
我们先简化一下网络,看的更清楚一些。这个稍微有一点复杂……
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这看着很复杂,静下心来,自己写一遍就很清楚了,其实挺简单的

最后更新W1:
在这里插入图片描述

二、BP代码
最后附上代码:

import numpy as np

def sigmoid(x): #设置激活函数
    return 1 / (1 + np.exp(-x))

if __name__ == "__main__":
    # 初始化
    lr = 0.05 # 学习率
    Iter = 100001 # 迭代次数
    w1 = [[0.10, 0.20], [0.30, 0.40]]  # 输入层-->隐藏层权值
    w2 = [[0.50, 0.60], [0.70, 0.80]]  # 隐藏层-->输出层权值
    b1 = 0.10 # bias
    b2 = 0.20
    input = [0.05,0.10] # 输入
    target = [0.50,1.00] # 输出

    net1 = np.dot(w1,input) + b1
    net_out = sigmoid(net1) # 激活函数
    net2 = np.dot(w2,net_out) + b2
    out = sigmoid(net2) # 激活函数
    for n in range(Iter): # 开始迭代
        delta2 = np.multiply(-(target - out),np.multiply(out,1-out)) * net_out
        delta1 = np.multiply(np.dot(np.array(w2).T, delta2), np.multiply(net_out, 1 - net_out)) * np.array(input)

        for i in range(len(w2)):
            w2[i] = w2[i] - lr * delta2[i]
        for i in range(len(w1)):
            w1[i] = w1[i] - lr * delta1[i]

        # 前向传播
        net1 = np.dot(w1, input) + b1
        net_out = sigmoid(net1)
        net2 = np.dot(w2, net_out) + b2
        out = sigmoid(net2)
        if(n%1000 == 0):
            print(str(n) + " result:" + str(out[0]) + ", result:" + str(out[1]))# 输出预测值

在这里插入图片描述

原文链接:https://blog.csdn.net/weixin_38132153/article/details/105199680



所属网站分类: 技术文章 > 博客

作者:imsorry

链接:https://www.pythonheidong.com/blog/article/292183/e5df8e9d9832d83928f9/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

28 0
收藏该文
已收藏

评论内容:(最多支持255个字符)