必威体育Betway必威体育官网
当前位置:首页 > IT技术

径向基(RBF)神经网络

时间:2019-08-19 08:43:09来源:IT技术作者:seo实验室小编阅读:79次「手机版」
 

rbf神经网络

径向基(RBF)神经网络是一种单隐层前馈神经网络,它使用径向基函数作为隐藏层神经元的激活函数,而输出层则是对隐层的神经元的输出的线性组合

上图就是径向基神经网络的结构展示,可以分析出,权值W仅在隐藏层到输出层才存在,这样的神经网络的优势在于:它是一种局部逼近网络,即在空间的某个局部区域上只有少数的几个连接权值会影响其输出,这就比bp神经网络的全局逼近网络具有较大的优势.

rbf神经网络因为具有上述的特点,因此具有较快的学习速度,而且它能够逼近任意的非线性函数,具有较强的泛化能力.

下面说两个关于RBF神经网络特别的地方

1.它的隐藏层的激活函数使用的是径向基函数.

2.在具体实现这个神经网络时,我们主要确定两个过程来训练:

1>确定神经元的中心,常用的方式包括随机采样与聚类,(下面的代码采用的是随机采样的方式进行实现)。

2>利用BP算法等来确定RBF神经网络的权值W与β..(这个值在程序的代码上是beta)

下面附上Python实现RBF神经网络的一个实例,主要用在函数的拟合上

from scipy import *  
from scipy.linalg import norm, pinv  
   
from matplotlib import pyplot as plt  
   
class RBF:  
       
    def __init__(self, indim, numCenters, outdim):  
        self.indim = indim  
        self.outdim = outdim  
        self.numCenters = numCenters  
        #这里我们初始化RBF的隐含神经元所对应的中心
        self.centers = [random.uniform(-1, 1, indim) for i in range(numCenters)]  
        #这里我们是定义RBF网络的两个重要的参数..
        #第一个参数代表β,第二个表示的是连接权值
        self.beta = 8  
        self.W = random.random((self.numCenters, self.outdim))  
           
    def _basisfunc(self, c, d):  
        assert len(d) == self.indim  
        return exp(-self.beta * norm(c-d)**2)  
       
    def _calcAct(self, X):  
        # calculate activations of RBFs  
        G = zeros((X.shape[0], self.numCenters), float)  
        for ci, c in enumerate(self.centers):  
            for xi, x in enumerate(X):  
                G[xi,ci] = self._basisfunc(c, x)  
        return G  
    #将x,y值传入进行训练   
    def train(self, X, Y):  
        """ X: matrix of dimensions n x indim  
            y: column vector of dimension n x 1 """  
           
        # choose random center vectors from training set  
        rnd_idx = random.permutation(X.shape[0])[:self.numCenters]  
        self.centers = [X[i,:] for i in rnd_idx]  
        #运行的中心为:[76 21 58 61  2  1 64 77 34 33]   
        print ("center", self.centers)  
        # calculate activations of RBFs  
        G = self._calcAct(X)  
        print (G)  
           
        # calculate output weights (pseudoinverse)  
        self.W = dot(pinv(G), Y)  
           
    def test(self, X):  
        """ X: matrix of dimensions n x indim """  
           
        G = self._calcAct(X)  
        Y = dot(G, self.W)  
        return Y  
   
        
if __name__ == '__main__':  
    n = 100  
    x = mgrid[-1:1:complex(0,n)].reshape(n, 1)  
    #print(x)
    # set y and add random noise  
    y = sin(3*(x+0.5)**3 - 1)  
    y += random.normal(0, 0.1, y.shape)  
    # rbf regression  
    rbf = RBF(1, 10, 1)  
    rbf.train(x, y)  
    z = rbf.test(x)  
         
    # plot original data  
    plt.figure(figsize=(12, 8))  
    plt.plot(x, y, 'k-')  
       
    # plot learned model  
    plt.plot(x, z, 'r-', linewidth=2)  
    plt.show() 

相关阅读

神经网络学习(九)优化方法:规范化

系列博客是博主学习神经网络中相关的笔记和一些个人理解,仅为作者记录笔记之用,不免有很多细节不对之处。 规范化 本节,我们会讨

卷积神经网络(CNN)中的卷积核 概念 原理

作者:Tim Dettmers(Understanding Convolution in Deep Learning) 原文地址: http://www.yangqiu.cn/aicapital/2382000.html 有太

神经网络算法

前馈神经网络 前馈神经网络(FeedForward NN ) :是一种最简单的神经网络,采用单向多层结构,各神经元分层排列,每个神经元只与前一层的

如何利用matlab做BP神经网络分析(包括利用matlab神经网

最近一段时间在研究如何利用预测其销量个数,在网上搜索了一下,发现了很多模型来预测,比如利用回归模型、时间序列模型,GM(1,1)模型,可是

RBF(径向基函数)神经网络

今天学习了RBF神经网络,里面有一些概念个人觉得不是很好理解。RBF神经网络是一种单隐层前馈神经网络,如下所示RBFRBF神经网络一共分

分享到:

栏目导航

推荐阅读

热门阅读