bp神经网络怎么实际应用啊?Python

原始数据输入,但是输出节点使用激活函数之后结果都是小于一的数,求出来的误差很大,而且误差会先减小后变大,感觉错误好多但不知道在哪


 import numpy as np


def sigmoid(x):
    return 1 / (1 + np.exp(-x))


def main():
    # 14条数据
    data = np.array([
        [1, 0, 0, 1, 0, 1, 1, 1],
        [0, 0, 1, 1, 0, 0, 1, 0],
        [1, 1, 0, 1, 1, 1, 0, 1],
        [0, 1, 0, 1, 0, 0, 1, 1],
        [1, 0, 1, 1, 0, 1, 1, 1],
        [1, 1, 0, 0, 1, 1, 1, 0],
        [0, 0, 0, 1, 0, 0, 1, 1],
        [1, 0, 1, 1, 0, 1, 1, 1],
        [1, 1, 0, 1, 0, 1, 0, 1],
        [1, 0, 0, 0, 1, 0, 1, 1],
        [1, 0, 0, 1, 0, 1, 1, 0],
        [0, 0, 1, 1, 0, 1, 0, 1],
        [1, 0, 0, 1, 0, 0, 1, 1],
        [0, 1, 0, 1, 0, 1, 1, 1]])
    print("原始数据:\n", data)
    # 十四条数据的跳高成绩
    highJump = np.array(
        [0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0])
    print("十四条数据的跳高成绩:\n", highJump)
    # 第十五条数据的输入
    data15 = np.array([0, 1, 0, 1, 1, 0, 1, 0])
    print("第十五条数据的输入:\n", data15)
    # 设置输入层与隐藏层之间的权值和阈值
    wInput = np.random.random(size=(6, 8))/10
    print("输入层与隐藏层之间的六组权值:\n", wInput)
    bInput = np.random.random(size=(6, 8))/10
    print("输入层与隐藏层之间的六组阈值:\n", bInput)
    # 设置隐藏层与输出层之间的权值和阈值
    wOutput = np.random.random(size=6)/10
    print("隐藏层与输出层之间的一组权值", wOutput)
    bOutput = np.random.random(size=6)/10
    print("隐藏层与输出层之间的一组阈值", bOutput)
    loss = 1
    count = 0
    while loss > 0.1:
        count = count + 1
        loss = 0
        outputNode = []
        for i in range(0, 14):

            # 正向传播
            # 计算隐藏层节点输入
            hide = []
            for j in range(0, 6):
                hideNode = 0
                for k in range(0, 8):
                    hideNode = data[i, k] * wInput[j, k] + \
                        bInput[j, k] + hideNode
                # print(hideNode)
                hideNode = sigmoid(hideNode)  # 激活函数
                hide.append(hideNode)
            hide = np.array(hide)
            # print("隐藏层结点", hide)
            output = 0
            for j in range(0, 6):
                output = hide[j] * wOutput[j] + bOutput[j] + output
            output = sigmoid(output)
            outputNode.append(output)
            # print("输出层结点", output)
            loss = ((output - highJump[i]) * (output - highJump[i])) / 2 + loss
        outputNode = np.array(outputNode)
        # 反向传播
        # print("隐藏层结点", hide)
        for i in range(0, 14):
            # 隐藏层与输出层之间权值阈值更新
            wOutputLoss = []
            for j in range(0, 6):
                wOutputLoss.append((outputNode[i] - highJump[i]) *
                                   outputNode[i] * (1 - outputNode[i])
                                   * hide[j])
            wOutputLoss = np.array(wOutputLoss)
            # print("wOutputLoss", wOutputLoss)
            bOutputLoss = []
            for j in range(0, 6):
                bOutputLoss.append((outputNode[i] - highJump[i]) *
                                   outputNode[i] * (1 - outputNode[i]))
            bOutputLoss = np.array(bOutputLoss)
            # print("bOutputLoss", bOutputLoss)
            for j in range(0, 6):
                wOutput[j] = wOutput[j] - 0.1 * wOutputLoss[j]
                bOutput[j] = bOutput[j] - 0.1 * bOutputLoss[j]
            # print("隐藏层与输出层更新后权值和阈值", wOutput, bOutput)
            # 输入层与隐藏层之间权值更新
            wInputLoss = np.ones((6, 8)) * 0
            for j in range(0, 6):
                for k in range(0, 8):
                    wInputLoss[j][k] = ((outputNode[i] - highJump[i]) *
                                        outputNode[i] *
                                        (1 - outputNode[i]) * wOutput[j]
                                        * hide[j] * (1 - hide[j]) * data[i][k])
            wInputLoss = np.array(wInputLoss)
            # print("wIutputLoss", wInputLoss)
            bInputLoss = np.ones((6, 8)) * 0
            for j in range(0, 6):
                for k in range(0, 8):
                    bInputLoss[j][k] = ((outputNode[i] - highJump[i]) *
                                        outputNode[i] * (1 - outputNode[i]) *
                                        wOutput[j] * hide[j] * (1 - hide[j]))
            bInputLoss = np.array(bInputLoss)
            # print("bIutputLoss", bInputLoss)
            for j in range(0, 6):
                for k in range(0, 8):
                    wInput[j][k] = wInput[j][k] - 0.1 * wInputLoss[j][k]
                    bInput[j][k] = bInput[j][k] - 0.1 * bInputLoss[j][k]
            # print("输入层与隐藏层之间更新后的权值和阈值", wInput, bInput)
            # print("输出", output)
        print("学习前的loss", loss)
        loss = 0
        for i in range(0, 14):
            # 正向传播
            # 计算隐藏层节点输入
            hide = []
            for j in range(0, 6):
                hideNode = 0
                for k in range(0, 8):
                    hideNode = data[i, k] * wInput[j, k] + \
                        bInput[j, k] + hideNode
                hideNode = sigmoid(hideNode)  # 激活函数
                hide.append(hideNode)
            hide = np.array(hide)
            output = 0
            for j in range(0, 6):
                output = hide[j] * wOutput[j] + bOutput[j] + output
            output = sigmoid(output)
            loss = ((output - highJump[i]) * (output - highJump[i])) / 2 + loss
            # print("输出", output)
        print("学习后的loss", loss)

    # 预测
    hide = []
    for j in range(0, 6):
        hideNode = 0
        for k in range(0, 8):
            hideNode = data15[k] * wInput[j, k] + \
                bInput[j, k] + hideNode
            hideNode = sigmoid(hideNode)  # 激活函数
        hide.append(hideNode)
    hide = np.array(hide)
    output = 0
    for j in range(0, 6):
        output = hide[j] * wOutput[j] + bOutput[j] + output
    output = sigmoid(output)
    print(output)
    print(loss)
    print(count)


if __name__ == '__main__':
    main()

2个回答

解决了。。。。。。。

GDdenvfen
GDdenvfen 能发下代码么
5 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
python的神经网络实现之BP神经网络
直接上代码,BP神经网络的一般形式: -- coding: utf-8 -- “”" Created on Sun Oct 14 10:41:33 2018 @author: fang “”" -- coding:utf-8 -- #! python2 import numpy as np 定义tanh函数 def tanh(x): return np.tanh(x) tanh函数的导数 def ...
BP神经网络的算法实现和应用
关于BP的神经网络的P神经网络的算法实现和应用P神经网络的算法实现和应用
BP 神经网络,应用例子
bp神经网络,很好的学习例子,好的话请不要吝惜你的赞美之词
bp神经网络的应用
使用matlab仿真实现对16进制数字及字母的识别
BP神经网络算法优化与应用
BP神经网络算法 BP算法实现 人工神经网络的基本模型 神经网络动量
matlab 在BP神经网络的应用
matlab文档,在bp神经网络上的详细应用,详细文档
BP神经网络的应用
BP神经网络实现个人信贷评估,对于银行来说,客户的信用直接影响其效益。
BP神经网络及其应用
以动画的形式直接显示BP神经网络的训练过程
BP神经网络简单应用
C语言实现的 基于bp神经网络的 应用小示例 可以帮助初学者
BP神经网络 Python
空闲期,闲来无事,把最基础的BP神经网络写一遍。 前向网络传递比较简单,直接矩阵相乘,这里忽略。 主要说反向网络传递: 1:输出网络误差 = 输出层损失函数导数 * 损失函数 2:隐含层网络误差 = 输出层损失函数导数 * (下一层误差 * 中间权重) 3:权重更新 = 原始权重 + 学习率 * (前分支转置 * 后误差) 4:偏置更新 = 原始偏置 + 学习率 * (前分支转置 * 后误差) 实...
Python : bp神经网络
经典的BP神经网络通常由三层组成: 输入层, 隐含层与输出层.通常输入层神经元的个数与特征数相关,输出层的个数与类别数相同, 隐含层的层数与神经元数均可以自定义. 参考这篇文章BP神经网络:http://www.cnblogs.com/Finley/p/5946000.html 我们用一个完成训练的神经网络处理回归问题, 每个样本拥有n个输入.相应地,神经网络拥有n个输入神经元和1个输出神经元
python自编BP神经网络
import numpy as np import matplotlib.pyplot as plt #避免中文乱码 plt.rcParams['font.sans-serif'] = 'SimHei' plt.rcParams['axes.unicode_minus'] = False #定义激活函数 def sigmoid(x): return 1/(1 + np.exp(-x)...
BP神经网络python简单实现
BP神经网络的原理在网上有很详细的说明,这里就不打算细说,这篇文章主要简单的方式设计及实现BP神经网络,并简单测试下在恒等计算(编码)作测试。  BP神经网络模型图如下 BP神经网络基本思想 BP神经网络学习过程由信息的下向传递和误差的反向传播两个过程组成 正向传递:由模型图中的数据x从输入层到最后输出层z的过程。 反向传播:在训练阶段,如果正向传递过程中发现输出的值与期
bp神经网络 python初探
最近抽空学习了一下bp神经网络,并且用python实现了一下。 加入了动量项和自调节步长,都是为了拟合的更快一些(这里指定了次数) python的numpy包里的矩阵乘法有些坑人,行列不分;被坑了很久,只好看了一下网上大神的博客,发现都是把矩阵拆开计算的。 from numpy import * import math import random as rd #数据集的处理,filena
BP神经网络PYthon代码实现
BP神经网络,Puthon代码实现,短短的代码,实现大大的功能。附加详细注释。
Python BP神经网络实现
Python_BP神经网络实现(向量化运算、鸢尾花分类测试) 简介 人工神经网络模型种类很多,其中根据网络内数据流向进行分类可以分为前馈网络、反馈网络和自组织网络。 通过对Andrew Ng的深度学习课程的学习,本文总结其中浅层神经网络一章的知识点(本文重点不在于公式讲解,而是算法的简单实现,具体理论可看——深度学习工程师)。在此介绍和利用Python实现BP神经网络,BP神经网络是一种...
BP神经网络Python
  参考这篇博客 BP神经网络:计算原理详解和MATLAB实现 用Python写了一个对二维坐标点二分类的代码。gif图如下,显示对应迭代次数对坐标点的分类情况 具体实现代码如下: # -*- coding:utf-8 -*- import numpy as np from math import e, pow, fabs import matplotlib.pyplot as plt imp...
BP神经网络——Python 实现
import os import numpy as np # Back propagation network class BP: def __init__(self, precision, max_learning_time, learning_rate, hidden_nodes, sigmoid): """ Parameter initializa
BP神经网络-bp神经网络.rar
BP神经网络-bp神经网络.rar BP神经网络的几个实例    有程序   和word文档
应用BP神经网络逼近非线性函数
基于MATLAB的BP神经网络来逼近双变量非线性函数,最后的逼近误差小于0.05
BP神经网络实例与工具箱应用
人工神经网络简介,人工神经元模型,人工神经网络的主要学习算法,基本BP算法公式推导,基本BP算法的缺陷及改进,应用实例及过程
基于matlab的bp神经网络的应用
很好的关于bp在matlab中的实现,对于bp网络是一种多层前馈型神经网路
BP神经网络在指纹识别中的应用
模式识别技术在现代社会中得到了广泛的应用。本文就该技术在指纹识别系统中的应用做初步介绍。指纹识别的原理,图像的采集,图像的预处理等不是本文论述重点,文中这种描述了图像的增强方法以及人工神经网络在指纹识别中的应用。
BP神经网络的算法改进及应用
BP神经网络的算法改进及应用,算法的具体实现
bp神经网络在图像压缩中的应用
用matlab编写的利用bp神经网络进行图像压缩的程序。
BP神经网络算法的简单实现与应用
通过一个简单的程序加深对BP神经网络算法的原理
BP神经网络的原理及简单应用
BP神经网络中应用到了梯度下降法,所以先介绍下梯度下降法。 梯度下降法    梯度下降法,也叫最速下降法,是求解无约束最优化问题的一种常用方法。标量场中,某一点上的梯度指向标量场增长最快的方向,梯度的长度是这个最大的变化率。梯度下降是迭代算法,每一步需要求解目标函数的梯度向量。由于沿着负梯度方向,函数值下降最快所以在迭代的每一步,以梯度负方向更新X的值。        求
机器学习——BP神经网络算法应用(下)
1、BP神经网络算法应用——简单非线性数据集测试(异或:XOR) 将BP神经网络算法应用(上)写好的NeuralNetwork.py文件与要测试的文件XOC_test.py文件放到同一目录下,并在XOC_test.py文件里面包含NeuralNetwork模块 代码如下: #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:
BP神经网络的改进研究及应用
BP神经网络的改进研究及应用,博士论文,大家可以看看
Python手写神经网络之(一)BP神经网络
目的   在学习完BP神经网络的推导后,我会用python(不带深度学习框架!)自己手写出一个简单的BP神经网络,以此加深对神经网络的理解,同时欢迎大家指出问题,一起学习与讨论~ 设计思路   本次我只使用了numpy库,为了简明易懂,使用类封装的方法,做了一个含有:四节点输入层,五节点的隐藏层,与一节点输出层的BP神经网络。   这个神经网络的学习目标是将输入层的前两个数字之和与后两
BP神经网络实现分类问题(python)
一些代码解释 python版本:3.6 梯度更新 下面的代码 是对输出层和隐层的梯度计算,具体可参考周志华机器学习103页梯度更新公式 for i in range(self.outputn):#计算输出层的梯度 y=self.o[i] g[i]=y*(1-y)*(n[i]-y) for i in ran...
BP神经网络算法【源程序】【python】
基于Python3.7实现的BP神经网络算法,里面包括源程序、训练数据、测试数据、算法运行步骤和结果。
python从零开始简单实现bp神经网络
使用python从头编写的三层bp神经网络。简单的对网上给出的数据进行训练和测试。
用python创建BP神经网络
数据挖掘结课设计,老师要求剖析一个分类程序,一开始找了个用Matlab实现的,也就是我上一篇博客所写的。有点心虚,毕竟一共才40多行代码,问老师用剖析matlab程序行不行。结果很显然,不然就不会有这篇博客出现了。不过老师说的挺在理,matlab可以用来验证算法,但实际应用开发时,还得用python、c++等实现。又在网上找了篇文章:BP算法实例—鸢尾花的分类(pyhton) https://bl...
bp神经网络算法 急啊!~~
给你一个函数 分子0.1Z+0.632 分母:Z^2-0.368z-0.26 要把这个函数做出来rnrn谁能给我一个c语言的程序
谁了解BP神经网络啊?
谁了解BP神经网络啊?rn一个朋友写了篇论文,让我帮看看,修正一下。rn可是我一点也不懂。丢人啊!
神经网络----BP神经网络
一、应用情况 神经网络在机器学习中应用比较广泛,比如函数逼近,模式识别,分类,特征提取、图像处理等方面。 二、原理 (1)神经元模型 神经元模型基本上包括多个输入(类似突触),这些输入分别被不同的权值相乘(收到的信号强度不同),然后被一个数学函数用来计算决定是否激发神经元。还有一个函数(也许是不变,就是复制)计算人工神经元的输出(有时依赖于某个门限)。 ...
神经网络学习 之 BP神经网络
上一次我们讲了M-P模型,它实际上就是对单个神经元的一种建模,还不足以模拟人脑神经系统的功能。由这些人工神经元构建出来的网络,才能够具有学习、联想、记忆和模式识别的能力。BP网络就是一种简单的人工神经网络。 本文具体来介绍一下一种非常常见的神经网络模型——反向传播(Back Propagation)神经网络。概述BP(Back Propagation)神经网络是1986年由Rumelhart和Mc
BP神经网络和混沌神经网络
是实现BP神经网络和混沌神经网络的matlab程序,但是没有调用神经网络工具箱。
BP神经网络Matlab实例BP神经网络Matlab实例BP神经网络Matlab实例BP神经网络Matlab实例
BP神经网络Matlab实例BP神经网络Matlab实例BP神经网络Matlab实例BP神经网络Matlab实例BP神经网络Matlab实例BP神经网络Matlab实例BP神经网络Matlab实例
相关热词 c# 去空格去转义符 c#用户登录窗体代码 c# 流 c# linux 可视化 c# mvc 返回图片 c# 像素空间 c# 日期 最后一天 c#字典序排序 c# 截屏取色 c#中的哪些属于托管机制

相似问题