精华内容
下载资源
问答
  • bp神经网络预测python
    千次阅读
    2020-12-20 17:30:01

    一文详解神经网络 BP 算法原理及 Python 实现

    什么是梯度下降和链式求导法则

    假设我们有一个函数 J(w),如下图所示。

    梯度下降示意图

    现在,我们要求当 w 等于什么的时候,J(w) 能够取到最小值。从图中我们知道最小值在初始位置的左边,也就意味着如果想要使 J(w) 最小,w的值需要减小。而初始位置的切线的斜率a > 0(也即该...

    文章

    玄学酱

    2017-08-02

    2044浏览量

    三层BP神经网络的python实现

    这是一个非常漂亮的三层反向传播神经网络的python实现,下一步我准备试着将其修改为多层BP神经网络。

    下面是运行演示函数的截图,你会发现预测的结果很惊人!

    提示:运行演示函数的时候,可以尝试改变隐藏层的节点数,看节点数增加了,预测的精度会否提升

    1 import ...

    文章

    罗兵

    2015-02-28

    681浏览量

    神经网络基础知识笔记

    神经网络表示

    神经元模型

    神经网络从大脑的工作原理得到启发,可用于解决通用的学习问题。神经网络的基本组成单元是神经元(neuron)。每个神经元具有一个轴突和多个树突。每个连接到本神经元的树突都是一个输入,当所有输入树突的兴奋水平之和超过某一阈值,神经元就会被激活。激活的神经元会沿着其轴突发射信号...

    文章

    墨航

    2017-05-16

    3733浏览量

    Keras框架简介

    Keras是基于Theano的一个深度学习框架,它的设计参考了Torch,用Python语言编写,是一个高度模块化的神经网络库,支持GPU和CPU。使用文档在这:http://keras.io/,中文文档在这:http://keras-cn.readthedocs.io/en/latest/ ,这...

    文章

    ayew

    2018-01-07

    871浏览量

    独家 | 一文读懂深度学习

    Figure1. Deep learning导图

    前言

    深度学习(deep learning)的概念最早可以追溯到1940-1960年间的控制论(cybernetics),之后在1980-1990年间发展为连接主义(connectionism),第三次发展浪潮便是2006年由人工神经网络(A...

    文章

    行者武松

    2017-08-01

    2136浏览量

    让AI帮你上分!——使用机器学习来挑选Dota2补位英雄

    机器学习不只是书本和文档中的枯燥理论,事实上,机器学习方法已经可以应用在我们日常生活的很多场景中,甚至是我们在玩游戏的时候,机器学习也能帮我们一起哈啤。

    比如在玩Dota2的时候,大家除了经常抱怨服务器问题,另外一个频繁出现的问题就是:「卧槽这么多英雄我该玩什么才好,随机吧又怕随出个不会玩的,选个...

    文章

    玄学酱

    2017-10-24

    1193浏览量

    深度学习最佳实践系列——权重w初始化

    作为深度学习的初学者,我有意识到的一件事情,即网络上没有太多的在线文档能够涵盖所有深层次的学习技巧。都是一些比较零碎的实践技巧,比如权重初始化、正则化及循环学习率等,这些可以使得训练和调试神经网络变得更容易和更高效。本系列博客内容将尽可能多地介绍一些实践细节,以便你更容易实现深度学习...

    文章

    【方向】

    2018-06-25

    3192浏览量

    2020 年图机器学习的热门趋势

    虽然我们才刚刚进入 2020 年,但已经可以在最新的研究论文中看到图机器学习(Graph Machine Learning,GML)的趋势了。本文是我对 2020 年图机器学习的重要内容以及对有关这些论文的讨论的看法。

    引言

    本文写作目的并非介绍图机器学习的基本概念,如图神经网络(Graph Ne...

    文章

    机器智能技术

    2020-02-10

    272浏览量

    计算机视觉怎么给图像分类?KNN、SVM、BP神经网络、CNN、迁移学习供你选(附开源代码)

    图像分类问题就是从固定的一组分类中,给输入图像分配标签的任务。这是计算机视觉的核心问题之一,尽管它看似简单,却在实际生活中有着各种各样的应用。

    传统方式:功能描述和检测。

    也许这种方法对于一些样本任务来说是比较好用的,但实际情况却要复杂得多。

    因此,我们将使用机器学习来为每个类别提供许多...

    文章

    行者武松

    2017-06-01

    1752浏览量

    三层BP神经网络的python实现

    这是一个非常漂亮的三层反向传播神经网络的python实现,下一步我准备试着将其修改为多层BP神经网络。

    下面是运行演示函数的截图,你会发现预测的结果很惊人!

    提示:运行演示函数的时候,可以尝试改变隐藏层的节点数,看节点数增加了,预测的精度会否提升

    1 import...

    文章

    吞吞吐吐的

    2017-09-13

    1236浏览量

    Python实现RNN

    一般的前馈神经网络中, 输出的结果只与当前输入有关与历史状态无关, 而递归神经网络(Recurrent Neural Network, RNN)神经元的历史输出参与下一次预测.

    本文中我们将尝试使用RNN处理二进制加法问题: 两个加数作为两个序列输入, 从右向左处理加数序列.和的某一位不仅与加数的...

    文章

    技术小阿哥

    2017-11-27

    1451浏览量

    Python实现RNN

    一般的前馈神经网络中, 输出的结果只与当前输入有关与历史状态无关, 而递归神经网络(Recurrent Neural Network, RNN)神经元的历史输出参与下一次预测.

    本文中我们将尝试使用RNN处理二进制加法问题: 两个加数作为两个序列输入, 从右向左处理加数序列.和的某一位不仅与加数的...

    文章

    科技探索者

    2017-11-07

    704浏览量

    神经支持决策树(NBDT)算法研究

    闲鱼技术-渐漓

    背景

    在闲鱼的很多业务场景中有大量需要利用算法进行分类的需求,例如图片分类、组件识别、商品分层、纠纷类别预测等。这些场景往往需要模型识别出的结果具备可解释性,也就是识别不能只得到其类别,最好能在识别过程中同时解释类别的层级和来源。如何进行有解释的图片分类成为了项目研发中的一个需求,...

    文章

    闲鱼技术

    2020-06-04

    577浏览量

    近200篇机器学习&深度学习资料分享(含各种文档,视频,源码等)

    From:http://www.tuicool.com/articles/rqIRJb2

    本文收集了百来篇关于机器学习和深度学习的资料,含各种文档,视频,源码等。而且原文也会不定期的更新,望看到文章的朋友能够学到更多。《Brief History of Machine Learning》

    介绍:这...

    文章

    武耀文

    2016-11-02

    2156浏览量

    Apache Spark 1.5新特性介绍

    Apache Spark社区刚刚发布了1.5版本,大家一定想知道这个版本的主要变化,这篇文章告诉你答案。

    DataFrame执行后端优化(Tungsten第一阶段)

    DataFrame可以说是整个Spark项目最核心的部分,在1.5这个开发周期内最大的变化就是Tungsten项目的第一阶段已经完成...

    文章

    小旋风柴进

    2017-05-02

    1226浏览量

    原来CNN是这样提取图像特征的。。。

    1.卷积操作

    假设有一个5*5的图像,使用一个3*3的卷积核(filter)进行卷积,得到一个3*3的矩阵(其实是Feature Map,后面会讲),如下所示:

    下面的动图清楚地展示了如何进行卷积操作(其实就是简单的点乘运算):

    一个图像矩阵经过一个卷积核的卷积操作后,得到了另一个矩阵,这个...

    文章

    技术小能手

    2018-11-26

    2348浏览量

    py4CV例子3Mnist识别和ANN

    1、什么是mnist数据集;

    mnist是一个被重度使用的数字手写字符集。它来自美国国家标准与技术研究所, National Institute of Standards and Technology (NIST). 训练集 (training set) 由来自 250 个不同人手写的...

    文章

    禾路

    2018-03-20

    886浏览量

    更多相关内容
  • python实现实 BP神经网络回归预测模型 神 主要介绍了python实现BP神经网络回归预测模型,文中通过示例代码介绍的非常详细,对大家的学习或者工作 具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...
  • 包含BP神经网络的原理算法模型,并使用BP神经网络对数据进行分类
  • pythonBP神经网络预测
  • BP神经网络预测股票,bp神经网络预测股票价格python代码,matlab源码.zip,lvdi.m,lvdi.csv
  • 1035128.rar,PSO_BP,新建文本文档.txt,pso_1.py,bp.py,新建文件夹
  • BP神经网络预测python

    千次阅读 多人点赞 2022-04-30 08:46:23
    下边是基于Python的简单的BP神经网络预测,多输入单输出,也可以改成多输入多输出,下边是我的数据,蓝色部分预测红色(x,y,v为自变量,z为因变量) 话不多说,直接上代码 # -*- coding: utf-8 -*- """ """ ...

    可以参考新发布的文章
    1.mlp多层感知机预测(python)
    2.lstm时间序列预测+GRU(python)
    下边是基于Python的简单的BP神经网络预测,多输入单输出,也可以改成多输入多输出,下边是我的数据,蓝色部分预测红色(x,y,v为自变量,z为因变量)
    数据集下载
    数据
    话不多说,直接上代码

    # -*- coding: utf-8 -*-
    
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    import BPNN
    from sklearn import metrics
    from sklearn.metrics import mean_absolute_error
    from sklearn.metrics import mean_squared_error
    #导入必要的库
    df1=pd.read_excel('2000.xls',0)
    df1=df1.iloc[:,:]
    #进行数据归一化
    from sklearn import preprocessing
    min_max_scaler = preprocessing.MinMaxScaler()
    df0=min_max_scaler.fit_transform(df1)
    df = pd.DataFrame(df0, columns=df1.columns)
    x=df.iloc[:,:-1]
    y=df.iloc[:,-1]
    #划分训练集测试集
    cut=300#取最后cut=30天为测试集
    x_train, x_test=x.iloc[:-cut],x.iloc[-cut:]#列表的切片操作,X.iloc[0:2400,0:7]即为1-2400行,1-7列
    y_train, y_test=y.iloc[:-cut],y.iloc[-cut:]
    x_train, x_test=x_train.values, x_test.values
    y_train, y_test=y_train.values, y_test.values
    #神经网络搭建
    bp1 = BPNN.BPNNRegression([3, 16, 1])
    train_data = [[sx.reshape(3,1), sy.reshape(1,1)] for sx, sy in zip(x_train, y_train)]
    test_data = [np.reshape(sx, (3,1)) for sx in x_test]
    #神经网络训练
    bp1.MSGD(train_data, 60000, len(train_data), 0.2)
    #神经网络预测
    y_predict=bp1.predict(test_data)
    y_pre = np.array(y_predict)  # 列表转数组
    y_pre=y_pre.reshape(300,1)
    y_pre=y_pre[:,0]
    #画图 #展示在测试集上的表现
    draw=pd.concat([pd.DataFrame(y_test),pd.DataFrame(y_pre)],axis=1);
    draw.iloc[:,0].plot(figsize=(12,6))
    draw.iloc[:,1].plot(figsize=(12,6))
    plt.legend(('real', 'predict'),loc='upper right',fontsize='15')
    plt.title("Test Data",fontsize='30') #添加标题
    #输出精度指标
    print('测试集上的MAE/MSE')
    print(mean_absolute_error(y_pre, y_test))
    print(mean_squared_error(y_pre, y_test) )
    mape = np.mean(np.abs((y_pre-y_test)/(y_test)))*100
    print('=============mape==============')
    print(mape,'%')
    # 画出真实数据和预测数据的对比曲线图
    print("R2 = ",metrics.r2_score(y_test, y_pre)) # R2
    

    下边是神经网络内部结构,文件名命名为 BPNN.py

    # encoding:utf-8
    
    '''
    BP神经网络Python实现
    '''
    
    import random
    import numpy as np
    
    
    def sigmoid(x):
        '''
        激活函数
        '''
        return 1.0 / (1.0 + np.exp(-x))
    
    def sigmoid_prime(x):
        return sigmoid(x) * (1 - sigmoid(x))
    
    class BPNNRegression:
        '''
        神经网络回归与分类的差别在于:
        1. 输出层不需要再经过激活函数
        2. 输出层的 w 和 b 更新量计算相应更改
        '''
        def __init__(self, sizes):
    
            # 神经网络结构
            self.num_layers = len(sizes)
            self.sizes = sizes
    
            # 初始化偏差,除输入层外, 其它每层每个节点都生成一个 biase 值(0-1)
            self.biases = [np.random.randn(n, 1) for n in sizes[1:]]
            # 随机生成每条神经元连接的 weight 值(0-1)
            self.weights = [np.random.randn(r, c)
                            for c, r in zip(sizes[:-1], sizes[1:])]
            
        def feed_forward(self, a):
            '''
            前向传输计算输出神经元的值
            '''
            for i, b, w in zip(range(len(self.biases)), self.biases, self.weights):
                # 输出神经元不需要经过激励函数
                if i == len(self.biases) - 1:
                    a = np.dot(w, a) + b
                    break
                a = sigmoid(np.dot(w, a) + b)
            return a
        
        def MSGD(self, training_data, epochs, mini_batch_size, eta, error = 0.01):
            '''
            小批量随机梯度下降法
            '''
            n = len(training_data)
            for j in range(epochs):
                # 随机打乱训练集顺序
                random.shuffle(training_data)
                # 根据小样本大小划分子训练集集合
                mini_batchs = [training_data[k:k+mini_batch_size]
                                for k in range(0, n, mini_batch_size)]
                # 利用每一个小样本训练集更新 w 和 b
                for mini_batch in mini_batchs:
                    self.updata_WB_by_mini_batch(mini_batch, eta)
                
                #迭代一次后结果
                err_epoch = self.evaluate(training_data)
                print("Epoch {0} Error {1}".format(j, err_epoch))
                if err_epoch < error:
                    break
                # if test_data:
                #     print("Epoch {0}: {1} / {2}".format(j, self.evaluate(test_data), n_test))
                # else:
                # print("Epoch {0}".format(j))
            return err_epoch
        
        def updata_WB_by_mini_batch(self, mini_batch, eta):
            '''
            利用小样本训练集更新 w 和 b
            mini_batch: 小样本训练集
            eta: 学习率
            '''
            # 创建存储迭代小样本得到的 b 和 w 偏导数空矩阵,大小与 biases 和 weights 一致,初始值为 0   
            batch_par_b = [np.zeros(b.shape) for b in self.biases]
            batch_par_w = [np.zeros(w.shape) for w in self.weights]
    
            for x, y in mini_batch:
                # 根据小样本中每个样本的输入 x, 输出 y, 计算 w 和 b 的偏导
                delta_b, delta_w = self.back_propagation(x, y)
                # 累加偏导 delta_b, delta_w 
                batch_par_b = [bb + dbb for bb, dbb in zip(batch_par_b, delta_b)]
                batch_par_w = [bw + dbw for bw, dbw in zip(batch_par_w, delta_w)]
            # 根据累加的偏导值 delta_b, delta_w 更新 b, w
            # 由于用了小样本,因此 eta 需除以小样本长度
            self.weights = [w - (eta / len(mini_batch)) * dw
                            for w, dw in zip(self.weights, batch_par_w)]
            self.biases = [b - (eta / len(mini_batch)) * db
                            for b, db in zip(self.biases, batch_par_b)]
    
        def back_propagation(self, x, y):
            '''
            利用误差后向传播算法对每个样本求解其 w 和 b 的更新量
            x: 输入神经元,行向量
            y: 输出神经元,行向量
            
            '''
            delta_b = [np.zeros(b.shape) for b in self.biases]
            delta_w = [np.zeros(w.shape) for w in self.weights]
    
            # 前向传播,求得输出神经元的值
            a = x # 神经元输出值
            # 存储每个神经元输出
            activations = [x] 
            # 存储经过 sigmoid 函数计算的神经元的输入值,输入神经元除外
            zs = []
            for b, w in zip(self.biases, self.weights):
                z = np.dot(w, a) + b
                zs.append(z)
                a = sigmoid(z) # 输出神经元
                activations.append(a)
            #-------------
            activations[-1] = zs[-1] # 更改神经元输出结果
            #-------------
            # 求解输出层δ
            # 与分类问题不同,Delta计算不需要乘以神经元输入的倒数
            #delta = self.cost_function(activations[-1], y) * sigmoid_prime(zs[-1])
            delta = self.cost_function(activations[-1], y) #更改后
            #-------------
            delta_b[-1] = delta
            delta_w[-1] = np.dot(delta, activations[-2].T)
            for lev in range(2, self.num_layers):
                # 从倒数第1层开始更新,因此需要采用-lev
                # 利用 lev + 1 层的 δ 计算 l 层的 δ 
                z = zs[-lev]
                zp = sigmoid_prime(z)
                delta = np.dot(self.weights[-lev+1].T, delta) * zp
                delta_b[-lev] = delta
                delta_w[-lev] = np.dot(delta, activations[-lev-1].T)
            return (delta_b, delta_w)
        
        def evaluate(self, train_data):
            test_result = [[self.feed_forward(x), y]
                            for x, y in train_data]
            return np.sum([0.5 * (x - y) ** 2 for (x, y) in test_result])
        
        def predict(self, test_input):
            test_result = [self.feed_forward(x)
                            for x in test_input]
            return test_result
    
        def cost_function(self, output_a, y):
            '''
            损失函数
            '''
            return (output_a - y)
        pass
    

    下边是我训练10000次得出的结果图
    Mape=3.8747546777023055 %
    R2 = 0.9892761559285088

    请添加图片描述
    接下来会出用LSTM,MLP以及GRU预测的代码,整理一下后续会发出来

    展开全文
  • python实现BP神经网络回归预测模型
  • python实现BP神经网络回归预测模型,示例代码介绍详细,代码复制即可使用。
  • 波士顿房价预测BP神经网络实现 1) 训练数据 housing.csv 使用波士顿房价数据 2) 使用Python代码实现前向和后向传播 3) 损失函数使用方差
  • 图4.2BP神经网络程序框图(3)网络训练及检验BP网络采用梯度下降法来降低网络的训练误差,考虑到基坑降水地面沉降范围内沉降量变化幅度较小的特点,训练时以训练目标取0.001为控制条件,考虑到网络的结构比较复杂,...

    如何建立bp神经网络预测 模型

    建立BP神经网络预测模型,可按下列步骤进行:1、提供原始数据2、训练数据预测数据提取及归一化3、BP网络训练4、BP网络预测5、结果分析现用一个实际的例子,来预测2015年和2016年某地区的人口数。

    已知2009年——2014年某地区人口数分别为3583、4150、5062、4628、5270、5340万人执行BP_main程序,得到[2015, 5128.呵呵3946380615234375][2016,5100.5797325642779469490051269531]代码及图形如下。

    谷歌人工智能写作项目:神经网络伪原创

    bp神经网络的隐层节点数对预测精度有何影响

    bp神经网络为什么要采用非线性函数来进行预测?

    提问:bp神经网络为什么要采用非线性函数来进行预测?回答:简单的讲,主要是复杂的bp神经网络的行为动态及神经元之间的相互作用是无法用简单的线性函数来描述的!

    一般来讲,用数学函数模拟一个系统输入与输出的关系(系统函数)时,设其函数为f(x),则它可以表征为一个输入变量x的多项式,即f(x)=∑an*x^n∣n=0->∞.;当n≥2时,f(x)就成为非线性函数了。

    an是每个x高次项的系数。可以用具体的实际实验数据来确定。

    bp神经网络预测是不是数据越多,预测能力就越好?

    为什么我的BP神经网络的预测输出结果几乎是一样的呢

    bp神经网络是有一定缺陷的,比如容易陷入局部极小值,还有训练的结果依赖初始随机权值,这就好比你下一个山坡,如果最开始的方向走错了,那么你可能永远也到不了正确的山脚。

    可以说bp神经网络很难得到正确答案,也没有唯一解,有些时候只能是更多次地尝试、修改参数,这个更多依赖自己的经验,通俗点说就是“你觉得行了,那就是行了”,而不像1+1=2那样确切。

    如果有耐心,确定方法没问题,那么接下来需要做的就是不停地尝试、训练,得到你想要的结果。另外,我不知道你预测的是什么,是时间序列么?比如证券?

    这种预测,比较重要的就是输入参数是否合适,这个直接决定了结果精度。

    BP神经网络在地面沉降预测中的应用

    地面沉降是多种自然和人为因素共同作用的结果。

    各种要素发生作用的时空序列、影响强度和方向以及它们之间的关系处于不断变化之中,同时各因素的变化及其影响并不是单方面的,各变量之间相互形成制约关系,这使得地面沉降过程极具复杂性。

    因此,要求预测模型能以在现有资料、信息基础,准确反映研究区的自然背景条件、地下水开采行为与地面沉降过程之间的复杂联系,并能识别和适应不同影响因素随时间发生的改变。

    BP神经网络作为一个非线性系统,可用于逼近非线性映射关系,也可用于逼近一个极为复杂的函数关系,是解释和模拟地面沉降等高度复杂的非线性动力学系统问题的一种较好的方法。

    8.4.1.1训练样本的确定根据第4章的分析,影响研究区域地面沉降过程的变量包含着复杂的自然和人为因素,超采深层地下水是造成研究区1986年以后地面沉降的主要原因,深层地下水的开采量和沉降监测点附近的各含水层组水位均与地面沉降有着很好的相关性。

    本区第四系浅层地下水系统(第Ⅰ含水层组)除河漫滩地段,一般为TDS都高于2g/L的咸水,因此工农业用途较少,水位一般保持天然状态,在本次模型研究中不予考虑。

    由于区内各地面沉降监测点的地面高程每年测量一次,为了保持与地面沉降数据的一致性,使神经网络模型能准确识别地下水开采与地面沉降之间的关系,所有数据均整理成年平均的形式。

    本章选择了控沉点处深层地下水系统的年均水位和区域地下水开采量作为模型的输入变量,考虑到水位和开采量的变化与沉降变形并不同步,有明显的滞后性存在,本章将前一年的开采量和年均水位也作为输入,故模型的输入变量为四个。

    以收集到的区内每个地面沉降监测点的年沉降量作为模型的输出变量,通过选择适合的隐含层数和隐层神经单元数构建BP模型,对地面沉降的趋势进行预测。

    本次收集到的地面沉降监测点处并未有常观孔的水位数据,如果根据历年实测等水位线推算,会产生很大的误差,导致预测结果的不稳定性。

    基于已经建立好的Modflow数值模型,利用ProcessingModflow软件里的水井子程序包,在控沉点处设置虚拟的水位观测井,通过软件模拟出的不同时期的水位,作为地面沉降神经网络模型的输入层,从而避免了以往的将各含水层组平均水位作为模型输入所带来的误差[55]。

    考虑到深层地下水系统各含水层组的水力联系较为密切,本次在每个地面沉降监测点处只设置一个水位观测井,来模拟深层地下水系统的水位。

    水井滤水管的起始位置与该点含水层的位置相对应,即滤水管的长度即为含水层的厚度。观测井在模型中的位置如8.31所示,绿色的点即为虚拟水位观测井。

    从图中可以看出6个沉降点在研究区内分布均匀,处于不同的沉降区域,有一定的代表性,通过对这6个点的地面沉降进行预测,可以反映出不同区域的沉降趋势。数值模型模拟得到的各沉降点年均水位如图8.32所示。

    图8.31控沉点虚拟水井在Modflow数值模型中的分布示意图图8.32模拟得到的各沉降点处虚拟水井年均水位动态8.4.1.2样本数据的预处理由于BP网络的输入层物理量及数值相差甚远(不属于一个数量级),为了加快网络收敛的速度,在训练之前须将各输入物理量进行预处理。

    数据的预处理方法主要有标准化法、重新定标法、变换法和比例放缩法等等。

    本章所选用的是一种最常用的比例压缩法,公式为[56]变环境条件下的水资源保护与可持续利用研究式中:X为原始数据;Xmax、Xmin为原始数据的最大值和最小值;T为变换后的数据,也称之为目标数据;Tmax、Tmin为目标数据的最大值和最小值。

    由于Sigmoid函数在值域[0,0.1]和[0.9,1.0]区域内曲线变化极为平坦,因此合适的数据处理是将各输入物理量归至[0.1,0.9]之间。

    本章用式(8.7)将每个样本输入层的4个物理量进行归一化处理变环境条件下的水资源保护与可持续利用研究处理后的数据见表8.14。

    表8.14BP神经网络模型数据归一化表续表8.4.1.3网络结构的确定BP神经网络的建立,其重点在于网络结构的设计,只要隐层中有足够多的神经元,多层前向网络可以用来逼近几乎任何一个函数。

    一般地,网络结构(隐层数和隐层神经元数)和参数(权值和偏置值)共同决定着神经网络所能实现的函数的复杂程度的上限。结构简单的网络所能实现的函数类型是非常有限的,参数过多的网络可能会对数据拟合过度。

    本章将输入样本的个数定为4个,输出样本为1个。

    但是对于隐含层数及隐含层所含神经元个数的选择,到目前为止还没有明确的方法可以计算出实际需要多少层或多少神经元就可以满足预测精度的要求,在选择时通常是采用试算的方法[56,57]。

    为了保证模型的预测精度和范化能力,根据收集到的资料的连续性,本次研究利用1988~2002年15组地面沉降历史观测数据和对应的当年及前一年的开采量、年均水位组织训练,以2003年和2004年的实测地面沉降数据校验模型的预测能力,尝试多种试验性网络结构,其他模型参数的选择采取保守方式,以牺牲训练速度换取模型稳定性。

    以2003年和2004年的平均相对误差均小于20%作为筛选标准,最终选择三层BP网络作为模型结构,隐层神经元的个数设置为3。网络结构如图8.33所示,参数见表8.15。

    表8.15BP网络模型参数一览表图8.33神经网络模型结构图8.4.1.4网络的训练与预测采用图8.33确定的网络结构对数据进行训练,各个沉降点的训练过程和拟合效果如图8.34、图8.35所示。

    从图8.35可以看出,训练后的BP网络能很好地逼近给定的目标函数。说明该模型的泛化能力较好,模拟的结果比较可靠。

    通过该模型模拟了6个沉降点在2003和2004年的沉降量(表8.16),可以看出2003年和2004年模拟值和实际拟合较好,两年的平均相对误差均小于20%,说明BP神经网络可以用来预测地面沉降的趋势。

    表8.16监测点年沉降量模拟误差表图8.34各沉降点训练过程图8.4.1.5模型物理意义探讨虽然现今的BP神经网络还是一个黑箱模型,其参数没有水文物理意义[58]。

    但从结构上分析,本章认为地面沉降与ANN是同构的。

    对于每个控沉点来说,深层地下水系统的开采量和含水层组的水位变化,都会引起地层应力的响应,从而导致整体的地面标高发生变化,这一过程可以与BP神经网络结构进行类比。

    其中,深层地下水系统的3个含水层组相当于隐含层中的3个神经元,各含水层组对地面沉降的奉献值相当于隐含层中人工神经元的阈值,整体上来说,本次用来模拟地面沉降的BP神经网络结构已经灰箱化(表8.17)。

    图8.35各监测点年沉降量神经网络模型拟合图表8.17BP神经网络构件物理意义一览表。

    bp神经网络遇到新的数据,就预测不准,怎么弄?

    预测数据的话BP不是特别好用,最好用Elman反馈神经网络或者RNN循环神经网络,这些有记忆功能的网络比较好用。bp主要和你选择的隐含层数,和误差范围,学习率有关。

    你可以调节相关参数来改变神经网络,获得更精确的结果。

    建立BP神经网络地面沉降预测模型

    基坑降水引起地面沉降的BP神经网络预测模型建模过程如下:(1)样本选择因基坑降水引起的地面沉降量和距离基坑的距离关系密切,因此建模选用“基坑降水引起沉降工程数据(第二类)”(见表4.1)中的相关数据作为样本进行学习训练和检验。

    (2)BP神经网络结构设计对于BP网络,对于任何在闭区间内的一个连续函数都可以用单隐层的BP网络逼近,因而一个三层BP网络就可以完成任意的n维到m维的映射。

    根据网络结构简单化的原则,确定采用三层BP网络结构,即输入层为沉降点距基坑的距离L(m)、等效压缩模量E(MPa)、水位降深H(m)和支护刚度n四个参数,输出层为地面累积沉降量(mm),隐层层数为1层。

    隐层的神经元数目选择是一个十分复杂的问题,往往需要根据设计者的经验和多次实验来确定,因而不存在一个理想的解析式来表示。隐单元的数目与问题的要求,与输入、输出单元的数目有直接的关系。

    隐单元数目太多会导致学习时间过长,误差不一定最佳,也会导致容错性差、不能识别以前没有看到的样本,因此一定存在一个最佳的隐单元数。

    研究通过一次编程比较了隐层神经元个数分别为5、10、15、20、25、30、40时训练速度及检验精度。

    图4.2BP神经网络程序框图(3)网络训练及检验BP网络采用梯度下降法来降低网络的训练误差,考虑到基坑降水地面沉降范围内沉降量变化幅度较小的特点,训练时以训练目标取0.001为控制条件,考虑到网络的结构比较复杂,神经元个数比较多,需要适当增加训练次数和学习速率,因此初始训练次数设为10000次,学习速率取0.1,中间层的神经元传递函数采用S型正切函数tansig,传输函数采用logsig,训练函数采用trainlm,选用38组数据中的33组作为训练样本,5组作为检验样本。

    (4)网络实现及检验效果使用MATLAB6.0编程建立基于BP神经网络的基坑降水地面沉降预测模型(程序代码见附件1),其训练误差及检验效果如下:图4.3训练误差曲线图4.4预测误差曲线由图4.3、图4.4可见:样本数据收敛,训练误差较小,中间层神经单元个数为10时预测精度较好,误差小于20%,误差满足工程需求。

    关于构建一个三层BP神经网络对药品的销售进行预测(程序由matlab编写)

    clearall;closeall;clc;%p=[205623952600229816341600183714781900239526002298163416001873147819001500260022981634160018731478190015002046];t=[187314781900150020461556];p=[205623952600229816341600];%--归一化输入输出--映射到[0,1]--%pmax=max(p);pmin=min(p);P=(p-pmin)./(pmax-pmin);tmax=max(t);tmin=min(t);T=(t-tmin)./(tmax-tmin);net=newff(P,T,5,{'tansig','purelin'},'traingdx');%--设置训练参数--%=50;=0.05;net.trainParam.epochs=1000;=1e-3;net.divideFcn='';[net,tr]=train(net,P,T);A=sim(net,P);a=A.*(tmax-tmin)+tmin;x=7:12;figureplot(x,t,'+');holdon;plot(x,a,'or');holdoff;xlabel('month');ylabel('**')legend('实际','预测')。

     

    展开全文
  • python 实现的bp神经网络预测,数据已经有,可以直接替换,叠加次数还有步长可以自己设置。
  • 前两期线性回归及逻辑回归项目已发布(见文末链接),今天来讲讲BP神经网络BP神经网络 全部代码 https://github.com/lawlite19/MachineLearning_Python/blob/master/NeuralNetwok/NeuralNetwork.py 神经网络...
  • 神经网络模型 import random import math rate = 0.01 x = [1, 1, 1] print("迭代前") weight1 = [random.random(), random.random(), random.random(), random.random()] # 表示输入层第一个元素与隐藏层每个...

    神经网络模型
    在这里插入图片描述
    代码实现

    import random
    
    import math
    
    rate = 0.01
    x = [1, 1, 1]
    print("迭代前")
    weight1 = [random.random(), random.random(), random.random(), random.random()]  # 表示输入层第一个元素与隐藏层每个元素之间的权值
    weight2 = [random.random(), random.random(), random.random(), random.random()]
    weight3 = [random.random(), random.random(), random.random(), random.random()]
    weight4 = [random.random(), random.random(), random.random(), random.random()]  # 表示输出层第一个元素与隐藏层每个元素之间的权值
    weight5 = [random.random(), random.random(), random.random(), random.random()]  # 表示输出层第二个元素与隐藏层每个元素之间的权值
    t = [10, 10]
    
    print(weight1)
    print(weight2)
    print(weight3)
    print(weight4)
    print(weight5)
    
    print("********************")
    
    
    def sigmoid(m):
        return 1 / (1 + math.exp(-m))
    
    
    # 对输出层
    def delta():
        y = []
    
        y11 = sigmoid(y1) * (1 - sigmoid(y1)) * (sigmoid(y1) - t[0])
        y21 = sigmoid(y2) * (1 - sigmoid(y2)) * (sigmoid(y2) - t[1])
    
        y.append(y11)
        y.append(y21)
    
        return y
    
    
    def sigma():
        res = 0
        for j in range(4):
            res += delta()[0] * weight4[j] + delta()[1] * weight5[j]
        return res
    
    
    for i in range(100):
        # 利用前向传播进行预测
        a1 = sigmoid(weight1[0] * x[0] + weight2[0] * x[1] + weight3[0] * x[2])
        a2 = sigmoid(weight1[1] * x[0] + weight2[1] * x[1] + weight3[1] * x[2])
        a3 = sigmoid(weight1[2] * x[0] + weight2[2] * x[1] + weight3[2] * x[2])
        a4 = sigmoid(weight1[3] * x[0] + weight2[3] * x[1] + weight3[3] * x[2])
    
        y1 = sigmoid(a1 * weight4[0] + a2 * weight4[1] + a3 * weight4[2] + a4 * weight4[3])
    
        y2 = sigmoid(a1 * weight5[0] + a2 * weight5[1] + a3 * weight5[2] + a4 * weight5[3])
    
        # 利用后向传播进行训练
        # 对隐藏层
        delta1 = a1 * (1 - a1) * sigma()
        delta2 = a2 * (1 - a2) * sigma()
        delta3 = a3 * (1 - a3) * sigma()
        delta4 = a4 * (1 - a4) * sigma()
    
        weight1[0] = weight1[0] - rate * delta1
        weight1[1] = weight1[1] - rate * delta2
        weight1[2] = weight1[2] - rate * delta3
        weight1[3] = weight1[3] - rate * delta4
    
        weight2[0] = weight2[0] - rate * delta1
        weight2[1] = weight2[1] - rate * delta2
        weight2[2] = weight2[2] - rate * delta3
        weight2[3] = weight2[3] - rate * delta4
    
        weight3[0] = weight3[0] - rate * delta1
        weight3[1] = weight3[1] - rate * delta2
        weight3[2] = weight3[2] - rate * delta3
        weight3[3] = weight3[3] - rate * delta4
    
        weight4[0] = weight4[0] - rate * delta()[0]
        weight4[1] = weight4[1] - rate * delta()[0]
        weight4[2] = weight4[2] - rate * delta()[0]
        weight4[3] = weight4[3] - rate * delta()[0]
    
        weight5[0] = weight5[0] - rate * delta()[1]
        weight5[1] = weight5[1] - rate * delta()[1]
        weight5[2] = weight5[2] - rate * delta()[1]
        weight5[3] = weight5[3] - rate * delta()[1]
    
    print("迭代后")
    print(weight1)
    print(weight2)
    print(weight3)
    print(weight4)
    print(weight5)
    
    
    

    运行结果

    "D:\py project\exer\venv\Scripts\python.exe" "D:/py project/exer/BPNeuralNet.py"
    迭代前
    [0.6749607312139871, 0.72473923486996, 0.09567769814501037, 0.19543508716273783]
    [0.9480136217394588, 0.78660703084072, 0.9494596065013234, 0.03326308822834956]
    [0.03979060320446026, 0.8702010897572475, 0.24010512416547514, 0.8433444512401135]
    [0.6136627683014735, 0.8112779287264847, 0.08326044079467965, 0.360091538512604]
    [0.31328870558368593, 0.08221450543994302, 0.3888970740339499, 0.9522872815161906]
    ********************
    迭代后
    [1.4926069142352807, 1.3376534106464741, 1.0260221454441008, 1.1904378925716226]
    [1.7656598047607523, 1.3995212066172344, 1.8798040538004144, 1.0282658936372342]
    [0.8574367862257543, 1.4831152655337618, 1.170449571464566, 1.8383472566489978]
    [2.4582950326913084, 2.6559101931163203, 1.9278927051845134, 2.2047238029024383]
    [2.161910787519616, 1.930836587375873, 2.2375191559698795, 2.800909363452121]
    
    Process finished with exit code 0
    
    

    由于没有合适数据进行检验,所以无法确定代码的准确性。

    参考资料
    参考资料

    展开全文
  • 数学建模:基于灰色和bp神经网络的人口预测问题。数学建模知识,望对你能有所帮助!
  • BP神经网络Python代码实现)基于pytorch
  • python代码实现,可以调整网络结构,适用分类与回归问题,包含随机梯度下降、动量梯度下降,RMSProp、Adam优化算法。
  • 基于Python实现BP神经网络,参考资料会放在最后。 BP神经网络误差向量推导过程用到了微分链式求导 了解整个BP神经网络运行原理之后,就挺简单的 像一般神经网络一样,BP神经网络先进行FP传导即正向传导,案例中只...
  • BP神经网络模型预测Python代码实现,测试有效
  • bp神经网络python实现

    2018-11-17 12:23:20
    利用python实现bp神经网络,采用误差逆传播算法训练模型,并在一个toy set上进行了验证
  • 联想大家熟悉的回归问题,神经网络模型实际上是根据训练样本创造出一个多维输入多维输出的函数,并使用该函数进行预测, 网络的训练过程即为调节该函数参数提高预测精度的过程.神经网络要解决的问题与最小二乘法回归...
  • 基于BP神经网络的人口预测
  • tesorflow用于BP神经网络进行回归预测python,可以调节参数,全连接层三个,预测结果print出来,具体数据可造,格式通用即可
  • 利用Python实现的BP神经网络进行人脸识别,源码公开,打开就能使用,欢迎大家学习借鉴,进制使用于非法用途或者有损他人利益。
  • 机器学习 BP神经网络(Python实现)

    万次阅读 多人点赞 2019-06-08 15:38:11
    一个神经元即一个感知机模型,由多个神经元相互连接形成的网络,即神经网络。 这里我们只讨论单隐层前馈神经网络,其连接形式入下: 神经网络模型的待估参数即,每个神经元的阈值,以及神经元之间的连接权重。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,486
精华内容 4,194
关键字:

bp神经网络预测python

友情链接: numberGuessProject.zip