深度学习之 RBF神经网络

RBF神经网络通常只有三层,即输入层、中间层和输出层。其中中间层主要计算输入x和样本矢量c(记忆样本)之间的欧式距离的Radial Basis Function (RBF)的值,输出层对其做一个线性的组合。

径向基函数:

RBF神经网络的训练可以分为两个阶段:

第一阶段为无监督学习,从样本数据中选择记忆样本/中心点;可以使用聚类算法,也可以选择随机给定的方式。

 

第二阶段为监督学习,主要计算样本经过RBF转换后,和输出之间的关系/权重;可以使用BP算法计算、也可以使用简单的数学公式计算。

 

1. 随机初始化中心点
2. 计算RBF中的激活函数值,每个中心点到样本的距离
3. 计算权重,原函数:Y=GW
4. W = G^-1Y

RBF网络能够逼近任意非线性的函数(因为使用的是一个局部的激活函数。在中心点附近有最大的反应;越接近中心点则反应最大,远离反应成指数递减;就相当于每个神经元都对应不同的感知域)。

可以处理系统内难以解析的规律性,具有很好的泛化能力,并且具有较快的学习速度。

有很快的学习收敛速度,已成功应用于非线性函数逼近、时间序列分析、数据分类、模式识别、信息处理、图像处理、系统建模、控制和故障诊断等。

当网络的一个或多个可调参数(权值或阈值)对任何一个输出都有影响时,这样的网络称为全局逼近网络。由于对于每次输入,网络上的每一个权值都要调整,从而导致全局逼近网络的学习速度很慢,比如BP网络。

如果对于输入空间的某个局部区域只有少数几个连接权值影响输出,则该网络称为局部逼近网络,比如RBF网络。

RBF和BP神经网络的对比

BP神经网络(使用Sigmoid激活函数)是全局逼近;RBF神经网络(使用径向基函数作为激活函数)是局部逼近;

相同点:

  • 1. RBF神经网络中对于权重的求解也可以使用BP算法求解。

不同点:

  • 1. 中间神经元类型不同(RBF:径向基函数;BP:Sigmoid函数)
  • 2. 网络层次数量不同(RBF:3层;BP:不限制)
  • 3. 运行速度的区别(RBF:快;BP:慢)

简单的RBF神经网络代码实现

# -*- coding:utf-8 -*-
"""@Time  : @Author: Feng Lepeng@File  : RBF_demo.py@Desc  :
"""
import numpy as np
import matplotlib as mpl
from matplotlib import pyplot as plt
from scipy.linalg import norm, pinv  # norm 求模,pinv 求逆mpl.rcParams["font.sans-serif"] = ["SimHei"]
np.random.seed(28)class RBF:"""RBF径向基神经网络"""def __init__(self, input_dim, num_centers, out_dim):"""初始化函数:param input_dim: 输入维度数目:param num_centers: 中间的核数目:param out_dim:输出维度数目"""self.input_dim = input_dimself.out_dim = out_dimself.num_centers = num_centersself.centers = [np.random.uniform(-1, 1, input_dim) for i in range(num_centers)]self.beta = 8self.W = np.random.random((self.num_centers, self.out_dim))def _basisfunc(self, c, d):return np.exp(-self.beta * norm(c - d) ** 2)def _calcAct(self, X):G = np.zeros((X.shape[0], self.num_centers), float)for ci, c in enumerate(self.centers):for xi, x in enumerate(X):G[xi, ci] = self._basisfunc(c, x)return Gdef train(self, X, Y):"""进行模型训练:param X: 矩阵,x的维度必须是给定的 n * input_dim:param Y: 列的向量组合,要求维度必须是n * 1:return:"""# 随机初始化中心点rnd_idx = np.random.permutation(X.shape[0])[:self.num_centers]self.centers = [X[i, :] for i in rnd_idx]# 相当于计算RBF中的激活函数值G = self._calcAct(X)# 计算权重==> Y=GW ==> W = G^-1Yself.W = np.dot(pinv(G), Y)def test(self, X):""" x的维度必须是给定的n * input_dim"""G = self._calcAct(X)Y = np.dot(G, self.W)return Yif __name__ == '__main__':# 构造数据n = 100x = np.linspace(-1, 1, n).reshape(n, 1)y = np.sin(3 * (x + 0.5) ** 3 - 1)# RBF神经网络rbf = RBF(1, 20, 1)rbf.train(x, y)z = rbf.test(x)plt.figure(figsize=(12, 8))plt.plot(x, y, 'ko', label="原始值")plt.plot(x, z, 'r-', linewidth=2, label="预测值")plt.legend()plt.xlim(-1.2, 1.2)plt.show()

效果图片:

 

RBF训练

RBF函数中心,扩展常数,输出权值都应该采用监督学习算法进行训练,经历一个误差修正学习的过程,与BP网络的学习原理一样.同样采用梯度下降爱法,定义目标函数为:

ei为输入第i个样本时候的误差。

这个等式输出函数中忽略了阈值,为使目标函数最小化,各参数的修正量应与其梯度成正比。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/454088.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis 队列_Redis与Rabbitmq消息队列的区别

将redis发布订阅模式用做消息队列和rabbitmq的区别:可靠性 redis :没有相应的机制保证消息的可靠消费,如果发布者发布一条消息,而没有对应的订阅者的话,这条消息将丢失,不会存在内存中;rabbit…

EasyUI中那些不容易被发现的坑——EasyUI重复请求2次的问题

问题控件:datagrid、combobox、所有能设置url属性的控件 问题版本:1.4.4、1.4.5(之前的版本没测) 问题如图: 重复请求2次,错误代码如图: 错误问题分析:html加载的时候回请求url加载数…

GCC编译的背后( 预处理和编译 汇编和链接 )

发表于 2010年05月18日 22:01 分类: 编程coding统计: 1评/465阅 2人收藏此文章&#xff0c; 收藏此文章(?)by falcon<zhangjinwgmail.com> 2008-02-22 平时在Linux下写代码&#xff0c;直接用"gcc -o out in.c"就把代码编译好了&#xff0c;但是这后面到底做了…

ElasticSearch Java API

ElasticSearch-Java Client类型 ElasticSearch-TransportClient环境准备 ElasticSearch-TransportClient连接 ElasticSearch-Document APIs ElasticSearch-搜索-原理 ElasticSearch-搜索-问题 ElasticSearch-搜索-问题解决思路 ElasticSearch-搜索-SearchType-类型一 E…

深度学习之卷积神经网络(Convolutional Neural Networks, CNN)

前面, 介绍了DNN及其参数求解的方法(深度学习之 BP 算法),我们知道DNN仍然存在很多的问题&#xff0c;其中最主要的就是BP求解可能造成的梯度消失和梯度爆炸.那么,人们又是怎么解决这个问题的呢?本节的卷积神经网络(Convolutional Neural Networks, CNN)就是一种解决方法. 我们…

Oracle DBA课程系列笔记(16)

第十六章&#xff1a; 用户管理 1、schema &#xff1a; user.object &#xff0c;用户认证方式&#xff1a;os 认证&#xff0c;database 认证 2、建立 database认证的用户&#xff1a; 10:00:48 SQL> create user rose …

python序列是几维_从一个1维的位数组获得一个特定的2维的1序列数组[Python] - python...

我正在使用Python&#xff0c;我需要找到执行以下任务的最有效方法。任务&#xff1a;给定零和一的任何一维数组v&#xff0c;用k> 0表示v的所有一维的子序列数。我需要从v获得一个二维数组w&#xff0c;使得&#xff1a;1)shape(w)(k&#xff0c;len(v))&#xff0c;2)对于…

深度学习之卷积神经网络(Convolutional Neural Networks, CNN)(二)

前面我们说了CNN的一般层次结构, 每个层的作用及其参数的优缺点等内容.深度学习之卷积神经网络(Convolutional Neural Networks, CNN)_fenglepeng的博客-CSDN博客 一 CNN参数初始化及参数学习方法 和机器学习很多算法一样, CNN在进行训练之前也要进行参数的初始化操作. 我们…

GCC Inline ASM GCC内联汇编

GCC 支持在C/C代码中嵌入汇编代码&#xff0c;这些汇编代码被称作GCC Inline ASM——GCC内联汇编。这是一个非常有用的功能&#xff0c;有利于我们将一些C/C语法无法表达的指令直接潜入C/C代码中&#xff0c;另外也允许我们直接写 C/C代码中使用汇编编写简洁高效的代码。1.基本…

Hadoop1.x版本升级Hadoop2.x

引言 随着企业数据化和Hadoop的应用越加广泛&#xff0c;hadoop1.x的框架设计越来越无法满足人们对需求&#xff0c;Apache一直在对Hadoop1.x进行修改&#xff0c;最后推出了新一代的Hadoop2.x。从业界使用分布式系统的变化趋势和 hadoop 框架的长远发展来看&#xff0c;MapRed…

本页由试用版打印控件lodop6.2.6输出_Visual Basic 6.0 Sirk 迷你版

Visual Basic 6.0 Sirk 迷你版 VB6 Sirk Mini 2019更新1、支持主流操作系统&#xff0c;避免原版安装失败的问题&#xff1a;支持Windows XP、Vista、Win7、Win8、Win10(32位、64位)。2、保留大部分常用功能&#xff0c;避免精简版过度精简&#xff1a;包含原版完整控件&#x…

深度学习之卷积神经网络 LeNet

卷积神经网络典型CNN LeNet&#xff1a;最早用于数字识别的CNNLeNet5&#xff1a;现在常说的一般就是LeNet5AlexNet&#xff1a;2012ILSVRC冠军&#xff0c;远超第二名的CNN&#xff0c;比LeNet更深&#xff0c;用多层小卷积叠加来替换单个的大卷积ZF Net&#xff1a;2013ILSV…

python爬虫常见反爬措施_爬虫常见的反爬措施有哪些

爬虫常见的反爬措施有三种&#xff1a;1、header头部信息解决方法&#xff1a;加User-Agent值&#xff1a;如果不加header头&#xff0c;部分网站服务器判断不到用户的访问来源&#xff0c;所以会返回一个404错误来告知你是一个爬虫&#xff0c;拒绝访问&#xff0c;解决办法如…

dom4j的读写xml文件,读写xml字符串

百度了一些博客&#xff0c;大同小异&#xff0c;在选取jar包工具的时候大概看了下&#xff0c;大抵是jdom原始&#xff0c;dom4j优秀。于是做了些练习。 参考&#xff1a;http://www.cnblogs.com/mengdd/archive/2013/06/05/3119927.html 1 package com.test.xml;2 3 import j…

深度学习之数据增强方案和TensorFlow操作

一、数据增强的方法介绍 增加训练数据&#xff0c; 则能够提升算法的准确率&#xff0c; 因为这样可以避免过拟合&#xff0c; 而避免了过拟合你就可以增大你的网络结构了。 当训练数据有限的时候&#xff0c; 可以通过一些变换来从已有的训练数据集中生成一些新的数据&#x…

移动前端头部标签(HTML5 head meta)

<!DOCTYPE html> <!-- 使用 HTML5 doctype&#xff0c;不区分大小写 --> <html lang"zh-cmn-Hans"> <!-- 更加标准的 lang 属性写法 http://zhi.hu/XyIa --> <head><!-- 声明文档使用的字符编码 --><meta charsetutf-8>&l…

python新建文件夹口令_python编程快速上手—口令保管箱

之前小编为大家整理了如何成为一个优秀的程序员应该具备的品质&#xff0c;接下来为大家展示一个简单有趣的python小项目&#xff0c;从中体会编程的乐趣。小编了解这个小项目之后&#xff0c;很是惊奇&#xff0c;觉得python竟然还可以做这样的事情。为什么要建立口令保管箱&a…

django+nginx+uwsgi部署web站点

环境&#xff1a; django&#xff1a;1.8.16 python&#xff1a;2.7.13 pip&#xff1a;2.7 uwsgi&#xff1a;2.0.15 project路径&#xff1a; /opt/cmdb/ Uwsgi的安装配置 1、安装python2.7 &#xff08;省略安装过程&#xff09; 2、安装pip2.7 &#xff08;省略安装过程&…

GCC源代码阅读

获取GCC源代码 阅读源代码的第一步是获取源代码&#xff0c;巧妇难为无米之炊嘛&#xff01; 使用以下任意方法均可获得gcc源代码&#xff1a; svn checkout svn://gcc.gnu.org/svn/gcc/trunk SomeLocalDir &#xff08;摘自http://gcc.gnu.org/svn.html&#xff09;git clone …

Nginx 动静分离

页面动静分离 后端 调用tomcat 集群 示例&#xff1a; server { listen 80; server_name www.www2.com ; root /web/www2/htmlloation /img/ {alias /web/www2/html/img/;}location ~ (\.jsp)|(\.do)$ {proxy_pass http:## //serverip:port;proxy_redirect off;// 重定向 指…