深度學習之 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.pswp.cn/news/454088.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454088.shtml
英文地址,請注明出處:http://en.pswp.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;// 重定向 指…