# -*- coding: utf-8 -*-
"""
Created on Mon Oct  1 22:15:54 2018
@author: Heisenberg
"""
import numpy as np
import math
import random
import string
import matplotlib as mpl
import matplotlib.pyplot as plt#random.seed(0)  #当我们设置相同的seed,每次生成的随机数相同。如果不设置seed,则每次会生成不同的随机数#参考https://blog.csdn.net/jiangjiang_jian/article/details/79031788#生成区间[a,b]内的随机数
def random_number(a,b):return (b-a)*random.random()+a#生成一个矩阵,大小为m*n,并且设置默认零矩阵
def makematrix(m, n, fill=0.0):a = []for i in range(m):a.append([fill]*n)return a#函数sigmoid(),这里采用tanh,因为看起来要比标准的sigmoid函数好看
def sigmoid(x):return math.tanh(x)#函数sigmoid的派生函数
def derived_sigmoid(x):return 1.0 - x**2#构造三层BP网络架构
class BPNN:def __init__(self, num_in, num_hidden, num_out):#输入层,隐藏层,输出层的节点数self.num_in = num_in + 1  #增加一个偏置结点self.num_hidden = num_hidden + 1   #增加一个偏置结点self.num_out = num_out#激活神经网络的所有节点(向量)self.active_in = [1.0]*self.num_inself.active_hidden = [1.0]*self.num_hiddenself.active_out = [1.0]*self.num_out#创建权重矩阵self.wight_in = makematrix(self.num_in, self.num_hidden)self.wight_out = makematrix(self.num_hidden, self.num_out)#对权值矩阵赋初值for i in range(self.num_in):for j in range(self.num_hidden):self.wight_in[i][j] = random_number(-0.2, 0.2)for i in range(self.num_hidden):for j in range(self.num_out):self.wight_out[i][j] = random_number(-0.2, 0.2)#最后建立动量因子(矩阵)self.ci = makematrix(self.num_in, self.num_hidden)self.co = makematrix(self.num_hidden, self.num_out)        #信号正向传播def update(self, inputs):if len(inputs) != self.num_in-1:raise ValueError('与输入层节点数不符')#数据输入输入层for i in range(self.num_in - 1):#self.active_in[i] = sigmoid(inputs[i])  #或者先在输入层进行数据处理self.active_in[i] = inputs[i]  #active_in[]是输入数据的矩阵#数据在隐藏层的处理for i in range(self.num_hidden - 1):sum = 0.0for j in range(self.num_in):sum = sum + self.active_in[i] * self.wight_in[j][i]self.active_hidden[i] = sigmoid(sum)   #active_hidden[]是处理完输入数据之后存储,作为输出层的输入数据#数据在输出层的处理for i in range(self.num_out):sum = 0.0for j in range(self.num_hidden):sum = sum + self.active_hidden[j]*self.wight_out[j][i]self.active_out[i] = sigmoid(sum)   #与上同理return self.active_out[:]#误差反向传播def errorbackpropagate(self, targets, lr, m):   #lr是学习率, m是动量因子if len(targets) != self.num_out:raise ValueError('与输出层节点数不符!')#首先计算输出层的误差out_deltas = [0.0]*self.num_outfor i in range(self.num_out):error = targets[i] - self.active_out[i]out_deltas[i] = derived_sigmoid(self.active_out[i])*error#然后计算隐藏层误差hidden_deltas = [0.0]*self.num_hiddenfor i in range(self.num_hidden):error = 0.0for j in range(self.num_out):error = error + out_deltas[j]* self.wight_out[i][j]hidden_deltas[i] = derived_sigmoid(self.active_hidden[i])*error#首先更新输出层权值for i in range(self.num_hidden):for j in range(self.num_out):change = out_deltas[j]*self.active_hidden[i]self.wight_out[i][j] = self.wight_out[i][j] + lr*change + m*self.co[i][j]self.co[i][j] = change#然后更新输入层权值for i in range(self.num_in):for i in range(self.num_hidden):change = hidden_deltas[j]*self.active_in[i]self.wight_in[i][j] = self.wight_in[i][j] + lr*change + m* self.ci[i][j]self.ci[i][j] = change#计算总误差error = 0.0for i in range(len(targets)):error = error + 0.5*(targets[i] - self.active_out[i])**2return error#测试def test(self, patterns):for i in patterns:print(i[0], '->', self.update(i[0]))#权重def weights(self):print("输入层权重")for i in range(self.num_in):print(self.wight_in[i])print("输出层权重")for i in range(self.num_hidden):print(self.wight_out[i])def train(self, pattern, itera=100000, lr = 0.1, m=0.1):for i in range(itera):error = 0.0for j in pattern:inputs = j[0]targets = j[1]self.update(inputs)error = error + self.errorbackpropagate(targets, lr, m)if i % 100 == 0:print('误差 %-.5f' % error)
#实例
def demo():patt = [[[1,2,5],[0]],[[1,3,4],[1]],[[1,6,2],[1]],[[1,5,1],[0]],[[1,8,4],[1]]]#创建神经网络,3个输入节点,3个隐藏层节点,1个输出层节点n = BPNN(3, 3, 1)#训练神经网络n.train(patt)#测试神经网络n.test(patt)#查阅权重值n.weights()
if __name__ == '__main__':demo()

(python代码)BP神经网络模型相关推荐

  1. bp神经网络的应用案例,bp神经网络模型的建立

    BP人工神经网络 人工神经网络(artificialneuralnetwork,ANN)指由大量与自然神经系统相类似的神经元联结而成的网络,是用工程技术手段模拟生物网络结构特征和功能特征的一类人工系统 ...

  2. Tensorflow深度学习实战之(七)--MP神经元与BP神经网络模型

    本文是在GPU版本的Tensorflow = 2.6.2 , 英伟达显卡驱动CUDA版本 =11.6,Python版本 = 3.6, 显卡为3060的环境下进行验证实验的!!! 文章目录 一.M-P神 ...

  3. 用matlab自己搭建bp神经网络,怎样在matlab里建立一个BP神经网络模型?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 用以下的数据怎样在matlab里建立一个BP神经网络模型?求高手帮忙!!最好是有详细步骤以及代码 年份 WTI(美元/桶) 2007-1 54.26 20 ...

  4. 用matlab跑神经网络模型,怎样在matlab里建立一个BP神经网络模型?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 用以下的数据怎样在matlab里建立一个BP神经网络模型?求高手帮忙!!最好是有详细步骤以及代码 年份 WTI(美元/桶) 2007-1 54.26 20 ...

  5. 怎样用matlab模型建立,怎样在matlab里建立一个BP神经网络模型?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 用以下的数据怎样在matlab里建立一个BP神经网络模型?求高手帮忙!!最好是有详细步骤以及代码 年份 WTI(美元/桶) 2007-1 54.26 20 ...

  6. bp神经网络预测模型例题,bp神经网络模型是什么

    1.BP神经网络中隐藏层节点个数怎么确定最佳? 1.神经网络算法隐含层的选取 1.1 构造法 首先运用三种确定隐含层层数的方法得到三个隐含层层数,找到最小值和最大值,然后从最小值开始逐个验证模型预测误 ...

  7. bp神经网络模型拓扑结构,bp神经网络的建模步骤

    如何建立bp神经网络预测 模型 . 建立BP神经网络预测模型,可按下列步骤进行:1.提供原始数据2.训练数据预测数据提取及归一化3.BP网络训练4.BP网络预测5.结果分析现用一个实际的例子,来预测2 ...

  8. BP神经网络模型用什么软件,bp神经网络数学模型

    1.如何建立bp神经网络预测 模型 建立BP神经网络预测 模型,可按下列步骤进行: 1.提供原始数据 2.训练数据预测数据提取及归一化 3.BP网络训练 4.BP网络预测 5.结果分析 现用一个实际的 ...

  9. bp神经网络的拓扑结构,bp神经网络模型结构图

    试画出BP神经网络结构输入层3节点,隐层5节点,输出层2节点 BP(BackPropagation)神经网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播 ...

  10. bp神经网络模型结构图,bp神经网络拓扑结构图

    试画出BP神经网络结构输入层3节点,隐层5节点,输出层2节点 BP(BackPropagation)神经网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播 ...

最新文章

  1. Windows Server中的故障转移群集的实现机制
  2. 视音频技术零基础学习方法
  3. mysql update返回_MySQL中,当update修改数据与原数据相同时会再次执行吗?
  4. [vue] vue在组件中引入插件的方法有哪些?
  5. 63linux_nat网络原理图64Linux网络配置指令65配置实例
  6. 一位19年的Mac用户:“我真的很讨厌库克”
  7. tcpip详解有必要看吗_车辆有必要安装“行车记录仪”吗?如何挑选看这里!
  8. 疫情情况下酒店办理入住流程
  9. K2 BPM平台应用价值(上篇):统一的流程管理平台对企业有多重要?|工作流平台
  10. 视频教程-微信公众平台开发入门-微信开发
  11. 推荐几款公众号写作必备工具
  12. 你的PC机或者终端,是怎么上网的?怎么连接到网络的?无线网怎么接入Internet,如何访问网络资源?
  13. C#--如何用字符串组成的逻辑表达式进行判断,如:“7>2(4<7||8>4)“,字符串写的逻辑表达式来进行判断(只需3步)
  14. 已知网络号求子网掩码c语言,已知ip地址求子网掩码 - 已知ip地址求子网掩码_已知ip地址和子网掩码求网络号、子网号和主机号...
  15. list of freely available programming books
  16. 4.2.8求解任务分配问题
  17. ZJNU-2094-D-鬼来了
  18. 第四章 实验一 用类描述坦克
  19. AlexNet详细解读
  20. matlab 计算周期信号功率谱密度,功率谱密度相关方法的MATLAB实现

热门文章

  1. 实体商家也能玩转月活10亿的微信小程序生态
  2. 谷歌 I/O 2019 将于 5 月 7 日举办;百度春晚红包被微信封杀
  3. 怎样用微信编辑器排版出美观的图文消息
  4. UReport2 - 套打实现
  5. Echarts的二次封装思考心得。封装成果:折线柱状混合图、立体柱状折线混合图、markline标记线
  6. 数字图像处理-前端实现
  7. Gradle不能加载依赖包的问题
  8. Android 11适配
  9. 绿色数据中心:避免能耗还是提高能效
  10. vue的 slot插槽