日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

深度学习之 RBF神经网络

發布時間:2023/12/14 pytorch 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习之 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個樣本時候的誤差。

這個等式輸出函數中忽略了閾值,為使目標函數最小化,各參數的修正量應與其梯度成正比。

總結

以上是生活随笔為你收集整理的深度学习之 RBF神经网络的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。