Python-BP神经网络

最近在学习BP神经网络相关知识,写下这篇文章记录以下,本文分为两个部分。
BP神经网络的介绍相关案例的实现


话不多说,进入正题!

一、BP神经网络的介绍

1.BP (Back Propagation) 神经网络是1986年由Rumelhart和McClelland为首的科学家提出的概念,是一种按照误差逆向传播算法训练的多层前馈神经网络,是应用最广泛的神经网络。
2.BP神经网络的结构
在这里插入图片描述

BP神经网络是一种典型的非线性算法。BP神经网络由输入层、输出层和之间若干层(一层或多层)隐含层构成,每一层可以有若干个节点。层与层之间节点的连接状态通过权重来体现。

只有一个隐含层的时候,这样的BP神经网络属于传统的浅层神经网络;当有多个隐含层的时候,这样的BP神经网络属于深度学习的神经网络。

在这里插入图片描述

3.感知器
感知器(Perceptron)的概念,在1950s由Frank Rosenblatt第一次引入。包括输入项、权重、偏置、激活函数、输出组成。
在这里插入图片描述
注意!!!偏置是一定要存在的,如果偏置不存在,就无法分类!!
4.举例分析在BP神经网络中是如何进行运算与运行的。
在这里插入图片描述

在这个例子中,w是我们的权重,b是我们的偏置,s(x)是我们的激活函数,o1与o2下面所对应的就是其真实值。

首先我们要先使用感知器,获得一个output值。
在这里插入图片描述
上图中的net 正是还未代入激活函数的下图
在这里插入图片描述
同样的步骤继续求o1的net值
在这里插入图片描述
之后求出out_o1与out_o2的值
在这里插入图片描述

在这里插入图片描述
之后再利用损失函数
在这里插入图片描述

求出o1与o2所损失的总的值。(其中t是我们的真实值,y是我们的预测值)
在这里插入图片描述
损失函数是利用了最小二分法!!之后继续计算

在这里插入图片描述
下面分别对上式中的部分逐个分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其中涉及到了高数部分的链式法则。
在经过计算后我们就可以得到更新后的权值。
在这里插入图片描述
同理,对输入层到隐含层之间的权值进行更新。
在这里插入图片描述

在这里插入图片描述
最后结果:
在这里插入图片描述
随着迭代次数的增多,越来越接近真实值。
以下是推导过程中用到的与权值变化相关的式子
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、python相关代码的实现

import numpy as np
#定义激活函数
def sigmoid(x,deriv=False):
    if deriv == True:
        return x*(1-x)
    return 1/(1+np.exp(-x))
x = np.array([[0,0,0],[0,1,1],[1,0,1],[0,0,1],[0,0,1]])
print(x.shape)
#指定label值
y = np.array([[0],[1],[1],[0],[0]])
print(y.shape)
#指定随机化种子,使得每次随机值一样
np.random.seed(1)
#定义三层的神经网络
w0 = 2*np.random.random((3,4)) - 1
w1 = 2*np.random.random((4,1)) - 1
print(w0)
print(w1)
for j in range(6000):
    l0 = x
    l1 = sigmoid(np.dot(l0,w0))
    l2 = sigmoid(np.dot(l1,w1))
    #真实值-预测值
    l2_error = y - l2
    if j%1000 == 0 :
        print("error"+str(np.mean(np.abs(l2_error))))
    l2_delta = l2_error*sigmoid(l2,deriv=True)
    l1_error = l2_delta.dot(w1.T)
    l1_delta = l1_error*sigmoid(l1,deriv=True)
    #更新w0 w1
    w1 += l1.T.dot(l2_delta)
    w0 += l0.T.dot(l1_delta)
  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值