@BP神经网络算法python 底层
TOC
大家好,我是朱比特
本节 主要讲解的是BP神经网络算法流程以及代码复现

下面几张图片主要是我学习过程的一些笔记,希望对大家的学习有一定的帮助。

##这里主要解释了梯度下降原理和3层网络的构建过程以及BP算法流程,利用链式法则对误差函数求偏导数的过程(算法的数学原理)



接下来是我简单构建的一个3层神经网络的代码过程。
此处我存在一个疑惑,当sigmoid函数遇到标签分类是【1,2,3】此类大于1的数据时,sigmoid函数是不是就失效了

在此,我想到一个有局限性的解决方法:对原excel的文件进行提前处理,比如对iris数据集 我将标签值和数据值都除以10,使得数据的值域位于【0:1】之间,这样做的训练效果比较好,能够适应sigmoid函数的局限性

但是这样的方法对于一些值域差距比较大的数据集适用性比较差,比如win数据集 长度4000宽度5 对数据值的预处理比较麻烦,因此这是我的一个疑惑点!
(ps:我也是在学习神经网络的过程中,如果有大神希望能帮我解决这个疑惑0,0)

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.utils import shuffle
def getdata(fpath):'''定义getdata 获取训练集数据'''#fpath = r'd:iris.xls'object = pd.read_excel(fpath)object = shuffle(object)m1 = object.iloc[0:120, 0:5]k3 = []k4=[]o=[]m2 = m1.values.tolist()k1 = object.iloc[0:120, 0:5]k2 = k1.values.tolist()for i in k2:k3.append(i)for i in k3:o.append([i[4]])labelset = np.array(o)for i in k3:k4.append(i[0:4])dataset = np.array(k4)return dataset, labelset,
def gettest(fpath):'''定义测试集数据这里主要是取了 第120-150行的数据(前面已经使用shuffle函数进行打乱顺序)'''#fpath = r'd:iris.xls'object = pd.read_excel(fpath)object = shuffle(object)m1 = object.iloc[120:150, 0:5]m2 = m1.values.tolist()k1 = object.iloc[120:150, 0:5]k2 = k1.values.tolist()k3 = []k4 = []for i in k2:k3.append(i)o = []for i in k3:o.append([i[4]])labeltrain = np.array(o)for i in k3:k4.append(i[0:4])datatrain = np.array(k4)print(datatrain,labeltrain)return datatrain,labeltrain
def prime_time(x, y, z):'''x,y,z主要是input层 hide层 output层 的神经元个数这里主要提供的是各个层的随机权重值'''value1 = np.random.randint(-5, 5, (1, y)).astype(np.float64)value2 = np.random.randint(-5, 5, (1, z)).astype(np.float64)weight1 = np.random.randint(-5, 5, (x, y)).astype(np.float64)weight2 = np.random.randint(-5, 5, (y, z)).astype(np.float64)return weight1, weight2, value1, value2
def sigmoid(z):return 1 / (1 + np.exp(-z))
def trainning_process(dataset, labelset, weight1, weight2, value1, value2):'''这个过程是训练过程主要对应的内容是 对e和w值利用链式法则求偏导数 然后利用损失函数对权重和偏执进行不断修正'''learning_rate = 0.01#学习率for i in range(len(dataset)):# 输入数据inputset = np.mat(dataset[i]).astype(np.float64)# 数据标签outputset = np.mat(labelset[i]).astype(np.float64)# 隐层输入input1 = np.dot(inputset, weight1).astype(np.float64)# 隐层输出output2 = sigmoid(input1 - value1).astype(np.float64)# 输出层输入input2 = np.dot(output2, weight2).astype(np.float64)# 输出层输出output3 = sigmoid(input2 - value2).astype(np.float64)update_b = np.multiply(output3, 1 - output3)update_a = np.multiply(update_b, outputset - output3)update_c = np.dot(update_a, np.transpose(weight2))update_d = np.multiply(output2, 1 - output2)update_e = np.multiply(update_c, update_d)value1_change = -learning_rate * update_evalue2_change = -learning_rate * update_aweight1_change = learning_rate* np.dot(np.transpose(inputset), update_e )weight2_change = learning_rate * np.dot(np.transpose(output2), update_a)value1 += value1_changevalue2 += value2_changeweight1 += weight1_changeweight2 += weight2_changereturn weight1, weight2, value1, value2
def testing(dataset, labelset, weight1, weight2, value1, value2):'''这是测试的过程返回的是一个记数器 只要predict - true_value的绝对值<0.04 我们就算预测成功'''rightcount = 0for i in range(len(dataset)):#这里是训练权重和偏执的过程inputset = np.mat(dataset[i]).astype(np.float64)outputset = np.mat(labelset[i]).astype(np.float64)output2 = sigmoid(np.dot(inputset, weight1) - value1)output3 = sigmoid(np.dot(output2, weight2) - value2)print(output3)# 确定其预测标签if abs(output3[0][0]-labelset[i][0]) <0.04:rightcount =rightcount+1# 输出预测结果result = rightcount/len(labelset)print("Acurracy ={:.4f} ".format(result))
if __name__ == '__main__':dataset, labelset = getdata( r'd:iri1.xls')weight1, weight2, value1, value2 = prime_time(len(dataset[0]), len(dataset[0]), 1)datatrain,labeltrain = gettest(r'd:iri1.xls')for i in range(20000):weight1, weight2, value1, value2 = trainning_process(dataset, labelset, weight1, weight2, value1, value2)rate = testing(datatrain, labeltrain, weight1, weight2, value1, value2)
```python
在这里插入代码片
```![在这里插入图片描述](https://img-blog.csdnimg.cn/20210405133809860.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MjMyODY3OA==,size_16,color_FFFFFF,t_70#pic_center)最后,iris数据集有需要的童鞋可以私信我哦,sklearn库里面也可以调用。
我这里主要用的是pandas来导入exel表的数据,训练结果还算不错,有准确率有93.1%-97.0%

机器学习小白,希望和大家一起学习进步!

这里是引用
《机器学习》周志华
bilibili浙江大学胡浩基老师机器学习研究生课程
bilibili 致敬大神 深度学习课程

BP神经网络算法 原理讲解以及底层代码复现相关推荐

  1. BP神经网络算法在MATLAB中的代码

    BP神经网络算法在MATLAB中的代码通常包括以下步骤: 导入所需的库,如nnstart.patternnet和train. 准备训练数据和测试数据.这通常包括读取数据文件.将数据转换为矩阵的形式并分 ...

  2. 人工神经网络与bp神经网络,BP神经网络算法原理

    BP神经网络原理 人工神经网络有很多模型,但是日前应用最广.基本思想最直观.最容易被理解的是多层前馈神经网络及误差逆传播学习算法(ErrorBack-Prooaeation),简称为BP网络. 在19 ...

  3. bp神经网络权值调整公式,bp神经网络算法推导

    神经网络BP模型 一.BP模型概述误差逆传播(ErrorBack-Propagation)神经网络模型简称为BP(Back-Propagation)网络模型. PallWerbas博士于1974年在他 ...

  4. BP神经网络算法基本原理,bp网络神经算法代码

    bp神经网络的算法改进一共有多少种啊!麻烦举例一下! . 改进点主要在以下几个方面1激励函数的坡度-------误差曲面的平台和不收敛现象----------------激励函数中引入陡度因子,分段函 ...

  5. ACO蚁群算法优化BP神经网络(ACO-BPNN)回归预测MATLAB代码(有优化前后的对比)

    ACO蚁群算法优化BP神经网络(ACO-BPNN)回归预测MATLAB代码(有优化前后的对比) 代码注释清楚. main为运行主程序,可以读取本地EXCEL数据. 很方便,容易上手. (以电厂运行数据 ...

  6. PSO粒子群算法优化BP神经网络(PSO-BPNN)回归预测MATLAB代码

    PSO粒子群算法优化BP神经网络(PSO-BPNN)回归预测MATLAB代码(有优化前后的对比) 代码注释清楚. main为运行主程序,可以读取本地EXCEL数据,也可以加载本地数据.mat,使用换自 ...

  7. SSA麻雀算法优化BP神经网络(SSA-BPNN)回归预测MATLAB代码(有优化前后的对比

    SSA麻雀算法优化BP神经网络(SSA-BPNN)回归预测MATLAB代码(有优化前后的对比) 代码注释清楚. main为运行主程序,可以读取本地EXCEL数据. 很方便,容易上手. (以电厂运行数据 ...

  8. 【BP预测】基于鸟群算法优化BP神经网络实现数据预测附Matlab代码

    1 简介 热舒适度是室内环境舒适性的评价指标,由于热舒适度的计算是一个复杂的非线性迭代过程,不便应用于空调实时控制系统中,为解决这一问题,可利用BP神经网络算法对热舒适度进行预测.但为了改善传统BP神 ...

  9. BP神经网络理解原理——用Python编程实现识别手写数字(翻译英文文献)

    BP神经网络理解原理--用Python编程实现识别手写数字   备注,这里可以用这个方法在csdn中编辑公式: https://www.zybuluo.com/codeep/note/163962 一 ...

  10. 4.1 神经网络算法原理

    神经网络算法介绍: https://blog.csdn.net/qq_37406130/article/details/79157025 AI从入门到放弃:BP神经网络算法推导及代码实现笔记: htt ...

最新文章

  1. Windows Server 2016-安装AD域服务注意事项
  2. junit5_JUnit 5和Selenium –使用Selenium内置的`PageFactory`实现页面对象模式
  3. python查看文件的编码格式
  4. EasyUI,二级页面内容的操作
  5. Coursera自动驾驶课程第5讲:Vehicle Dynamic Modeling
  6. linux 网络装机,如何搭建和配置PXE网络装机服务
  7. java书籍私藏书单推荐!
  8. Beanshell解析json-解析简单复杂json数据
  9. 2021年 CISCN writeup
  10. 制作一个简单的chrome插件
  11. 【已解决】VS code源代码控制器显示5k+的修改文件
  12. js apply call bind
  13. 第二章华氏度摄氏度转换
  14. vs2015常用代码块与自定义代码块
  15. 【金山文档】 2021级2021-2022学年第二学期大学物理实验考试表格-软件2112https://kdocs.cn/l/cmrTqjJ1ogsN
  16. sourcetree 与 命令对比
  17. 她26岁成中科大博导:我是工作上灭绝师太,生活中女汉子
  18. 3.深入浅出:结型场效应管原理应用——参考《模拟电子技术基础》清华大学华成英主讲
  19. 你盼世界,我盼望你无bug|掘金征文
  20. 省常中集训Day5 2022.8.7

热门文章

  1. 如何安装WinDriver—linux 系统下和Windows系统下———官网中文教程
  2. MYSQL查看操作日志
  3. 计算机文化基础(高职高专版 第十一版)第六章 答案
  4. 游戏英文词汇700+
  5. 我的希捷ST31000340NS,BIOS不认,磁头反复归位,BUSY模式的固件门硬盘修复成功
  6. MKVToolNix v7.4.0 正式版
  7. 软件技巧:优蛋开启出现Failed to set data for错误
  8. Windows10中同时安装MySQL5和MySQL8
  9. 【Python】指定【微信】好友自动发送消息
  10. 左程云 Java 笔记--排序