rbf神經網路 RBF神經網路以及Python實現

2021-10-11 20:01:25 字數 2785 閱讀 6047

rbf網路能夠逼近任意非線性的函式。可以處理系統內難以解析的規律性,具有很好的泛化能力,並且具有較快的學 習速度。當網路的乙個或多個可調引數(權值或閾值)對任何乙個輸出都有影響時,這樣的網路稱為全域性逼近網路。

由於對於每次輸入,網路上的每乙個權值都要調整,從而導致全域性逼近網路的學習速度很慢,比如bp網路。如果對於輸入空間的某個區域性區域只有少數幾個連線權值影響輸出,則該網路稱為區域性逼近網路,比如rbf網路。接下來重點先介紹rbf網路的原理,然後給出其實現。先看如下圖

下面是乙個比較好的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

self.centers = [random.uniform(-1, 1, indim) for i in xrange(numcenters)]

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

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]

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)

# 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)

# plot rbfs

plt.plot(rbf.centers, zeros(rbf.numcenters), 'gs')

for c in rbf.centers:

# rf prediction lines

cx = arange(c-0.7, c+0.7, 0.01)

cy = [rbf._basisfunc(array([cx_]), array([c])) for cx_ in cx]

plt.plot(cx, cy, '-', color='gray', linewidth=0.2)

plt.xlim(-1.2, 1.2)

plt.show()

RBF神經網路

核函式一般有如下函式 高斯函式 u e u2 2 反射sigmoid函式 u 1 1 eu 2 2 逆多二次函式 u 1 u2 2 1 2 其中,0 為基函式的拓展常數或寬度。rbf 徑向基函式神經網路 網路結構圖如下 對於輸入x x1,x2,xn t c1 c2,cm 為樣本中心,w w1,w2,...

神經網路rbf

clc clear close all ld 400 定義學習樣本的數量 x rand 2,ld 得到乙個2 400的乙個矩陣,每個元素在0 1之間 x x 0.5 1.5 2 1.5,1.5 x1 x 1,得到矩陣的第1行 x2 x 2,得到矩陣的第2行 f 20 x1.2 10 cos 2 pi...

RBF(徑向基函式)神經網路

今天學習了rbf神經網路,裡面有一些概念個人覺得不是很好理解。rbf神經網路是一種單隱層前饋神經網路,如下所示rbf rbf神經網路一共分為三層,第一層為輸入層即input layer,由訊號源節點組成 第二層為隱藏層即圖中中間的黃球,隱藏層中神經元的變換函式即徑向基函式是對中心點徑向對稱且衰減的非...