中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

網(wǎng)站建設(shè)成果成都官網(wǎng)seo服務(wù)

網(wǎng)站建設(shè)成果,成都官網(wǎng)seo服務(wù),做性事的視頻網(wǎng)站,b2c典型網(wǎng)站遺傳算法與深度學(xué)習(xí)實(shí)戰(zhàn)(22)——使用Numpy構(gòu)建神經(jīng)網(wǎng)絡(luò) 0. 前言1. 神經(jīng)網(wǎng)絡(luò)基礎(chǔ)1.1 簡(jiǎn)單神經(jīng)網(wǎng)絡(luò)的架構(gòu)1.2 神經(jīng)網(wǎng)絡(luò)的訓(xùn)練 2. 使用 Numpy 構(gòu)建神經(jīng)網(wǎng)絡(luò)2.1 網(wǎng)絡(luò)架構(gòu)2.2 實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò) 小結(jié)系列鏈接 0. 前言 我們已經(jīng)學(xué)習(xí)了如何使用進(jìn)化算法來優(yōu)化深度學(xué)…

遺傳算法與深度學(xué)習(xí)實(shí)戰(zhàn)(22)——使用Numpy構(gòu)建神經(jīng)網(wǎng)絡(luò)

    • 0. 前言
    • 1. 神經(jīng)網(wǎng)絡(luò)基礎(chǔ)
      • 1.1 簡(jiǎn)單神經(jīng)網(wǎng)絡(luò)的架構(gòu)
      • 1.2 神經(jīng)網(wǎng)絡(luò)的訓(xùn)練
    • 2. 使用 Numpy 構(gòu)建神經(jīng)網(wǎng)絡(luò)
      • 2.1 網(wǎng)絡(luò)架構(gòu)
      • 2.2 實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)
    • 小結(jié)
    • 系列鏈接

0. 前言

我們已經(jīng)學(xué)習(xí)了如何使用進(jìn)化算法來優(yōu)化深度學(xué)習(xí)網(wǎng)絡(luò)中的超參數(shù),與簡(jiǎn)單的隨機(jī)或網(wǎng)格搜索算法相比,使用進(jìn)化算法可以改善對(duì)超參數(shù)的搜索。多種進(jìn)化算法的變體,如粒子群優(yōu)化、進(jìn)化策略和差分進(jìn)化,可以用于搜索和優(yōu)化超參數(shù)。神經(jīng)進(jìn)化涵蓋了所有用于改進(jìn)深度學(xué)習(xí)的進(jìn)化算法,在本節(jié)中,我們使用 NumPy 構(gòu)建一個(gè)簡(jiǎn)單的多層感知器 (multi-layer perceptron, MLP) 作為神經(jīng)進(jìn)化的基礎(chǔ)。

1. 神經(jīng)網(wǎng)絡(luò)基礎(chǔ)

1.1 簡(jiǎn)單神經(jīng)網(wǎng)絡(luò)的架構(gòu)

人工神經(jīng)網(wǎng)絡(luò)受到人腦運(yùn)作方式的啟發(fā)。從本質(zhì)上講,它是對(duì)線性回歸和邏輯回歸的一種改進(jìn),神經(jīng)網(wǎng)絡(luò)在計(jì)算輸出時(shí)引入了多種非線性函數(shù)。此外,神經(jīng)網(wǎng)絡(luò)在修改網(wǎng)絡(luò)體系結(jié)構(gòu)以利用結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)跨多個(gè)域解決問題方面具有極大的靈活性。函數(shù)越復(fù)雜,網(wǎng)絡(luò)對(duì)于輸入的數(shù)據(jù)擬合能力就越大,因此預(yù)測(cè)的準(zhǔn)確性就越高。神經(jīng)網(wǎng)絡(luò)的典型結(jié)構(gòu)如下:

神經(jīng)網(wǎng)絡(luò)架構(gòu)

神經(jīng)網(wǎng)絡(luò)中的層 (layer) 是一個(gè)或多個(gè)節(jié)點(diǎn)(或稱計(jì)算單元)的集合,層中的每個(gè)節(jié)點(diǎn)都連接到下一層中的每個(gè)節(jié)點(diǎn)。輸入層由預(yù)測(cè)輸出值所需的輸入變量組成。輸出層中節(jié)點(diǎn)的數(shù)量取決于我們要預(yù)測(cè)連續(xù)變量還是分類變量。如果輸出是連續(xù)變量,則輸出層一個(gè)節(jié)點(diǎn)。
如果輸出結(jié)果是 n n n 個(gè)類別的預(yù)測(cè)類的分類,則輸出層中將有 n n n 個(gè)節(jié)點(diǎn)。隱藏層用于將輸入層的值轉(zhuǎn)換為高維空間中的值,以便我們可以從輸入中了解數(shù)據(jù)的更多特征。隱藏層中節(jié)點(diǎn)的工作方式如下:

藏層中節(jié)點(diǎn)

在上圖中, x 1 , x 2 , . . . , x n x_1, x_2, ..., x_n x1?,x2?,...,xn? 是自變量, x 0 x_0 x0? 是偏置項(xiàng),類似于線性方程 y = k x + b y=kx+b y=kx+b 里的 b b b w 1 , w 2 , . . . , w n w_1, w_2, ..., w_n w1?,w2?,...,wn? 是賦予每個(gè)輸入變量的權(quán)重。如果 a a a 是隱藏層中的節(jié)點(diǎn)之一,則計(jì)算方法如下所示:

a = f ( ∑ w i N w i x i ) a=f(\sum _{w_i} ^N w_ix_i) a=f(wi?N?wi?xi?)

f f f 函數(shù)是激活函數(shù),用于在輸入和它們相應(yīng)的權(quán)重值的總和上引入非線性??梢酝ㄟ^使用多個(gè)隱藏層實(shí)現(xiàn)更強(qiáng)的非線性能力。
綜上,神經(jīng)網(wǎng)絡(luò)是相互連接的層中節(jié)點(diǎn)權(quán)重的集合。該集合分為三個(gè)主要部分:輸入層,隱藏層和輸出層。神經(jīng)網(wǎng)絡(luò)中可以具有 n n n 個(gè)隱藏層,術(shù)語“深度學(xué)習(xí)”通常表示具有多個(gè)隱藏層的神經(jīng)網(wǎng)絡(luò)。 當(dāng)神經(jīng)網(wǎng)絡(luò)需要學(xué)習(xí)具有復(fù)雜上下文(例如圖像識(shí)別)或上下文不明顯的任務(wù)時(shí),就必須具有隱藏層,隱藏層也被稱為中間層。

1.2 神經(jīng)網(wǎng)絡(luò)的訓(xùn)練

訓(xùn)練神經(jīng)網(wǎng)絡(luò)實(shí)際上就是通過重復(fù)兩個(gè)關(guān)鍵步驟來調(diào)整神經(jīng)網(wǎng)絡(luò)中的權(quán)重:前向傳播和反向傳播。

  1. 在前向傳播中,我們將一組權(quán)重應(yīng)用于輸入數(shù)據(jù),將其傳遞給隱藏層,對(duì)隱藏層計(jì)算后的輸出使用非線性激活,通過若干個(gè)隱藏層后,將最后一個(gè)隱藏層的輸出與另一組權(quán)重相乘,就可以得到輸出層的結(jié)果。對(duì)于第一次正向傳播,權(quán)重的值將隨機(jī)初始化。
  2. 在反向傳播中,嘗試通過測(cè)量輸出的誤差,然后相應(yīng)地調(diào)整權(quán)重以降低誤差。神經(jīng)網(wǎng)絡(luò)重復(fù)正向傳播和反向傳播以預(yù)測(cè)輸出,直到獲得令誤差較小的權(quán)重為止。

2. 使用 Numpy 構(gòu)建神經(jīng)網(wǎng)絡(luò)

2.1 網(wǎng)絡(luò)架構(gòu)

在本節(jié)中,我們將實(shí)現(xiàn)基本的深度學(xué)習(xí)系統(tǒng),使用 NumPy 編寫多層感知器,本節(jié)并未使用類似 KerasPyTorch 的框架,以便可以清楚地可視化神經(jīng)網(wǎng)絡(luò)內(nèi)部過程。
一個(gè)簡(jiǎn)單的多層感知器 (multi-layer perceptron, MLP) 網(wǎng)絡(luò)如下所示,可以看到反向傳播是如何通過網(wǎng)絡(luò)傳播計(jì)算得到的損失的,以及神經(jīng)進(jìn)化優(yōu)化是如何將網(wǎng)絡(luò)的每個(gè)權(quán)重/參數(shù)替換為基因序列中的值的。實(shí)際上,這種進(jìn)化搜索與超參數(shù)搜索類似。

神經(jīng)網(wǎng)絡(luò)架構(gòu)

2.2 實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)

為了進(jìn)一步理解 MLP 及其內(nèi)部工作原理,我們將使用 NumPy 實(shí)現(xiàn) MLP。然后,研究這個(gè)簡(jiǎn)單網(wǎng)絡(luò)在各種分類問題上的訓(xùn)練過程。

(1) 使用 sklearnmake_datasets 函數(shù)構(gòu)建數(shù)據(jù)集:

import numpy as np
import sklearn
import sklearn.datasets
import sklearn.linear_model
import matplotlib.pyplot as pltnumber_samples = 100 #@param {type:"slider", min:100, max:1000, step:25}
difficulty = 1 #@param {type:"slider", min:1, max:5, step:1}
problem = "circles" #@param ["classification", "blobs", "gaussian quantiles", "moons", "circles"]
number_features = 2
number_classes = 2 
middle_layer = 5 #@param {type:"slider", min:5, max:25, step:1}
epochs = 25000 #@param {type:"slider", min:1000, max:50000, step:1000}def load_data(problem):  if problem == "classification":clusters = 1 if difficulty < 3 else 2informs = 1 if difficulty < 4 else 2data = sklearn.datasets.make_classification(n_samples = number_samples,n_features=number_features, n_redundant=0, class_sep=1/difficulty,n_informative=informs, n_clusters_per_class=clusters)if problem == "blobs":data = sklearn.datasets.make_blobs(n_samples = number_samples,n_features=number_features, centers=number_classes,cluster_std = difficulty)if problem == "gaussian quantiles":data = sklearn.datasets.make_gaussian_quantiles(mean=None, cov=difficulty,n_samples=number_samples,n_features=number_features,n_classes=number_classes,shuffle=True,random_state=None)if problem == "moons":data = sklearn.datasets.make_moons(n_samples = number_samples)if problem == "circles":data = sklearn.datasets.make_circles(n_samples = number_samples)return datadata = load_data(problem)
X, Y = dataplt.figure("Input Data")
plt.scatter(X[:, 0], X[:, 1], c=Y, s=40, cmap=plt.cm.Spectral)

下圖顯示了最高難度級(jí)別的數(shù)據(jù)集示例,修改問題類型以觀察每個(gè)數(shù)據(jù)集的變化。對(duì)于簡(jiǎn)單的 MLP 網(wǎng)絡(luò)來說,最困難的數(shù)據(jù)集是圓形數(shù)據(jù)集。

數(shù)據(jù)集

模型參數(shù)選項(xiàng)如下表所示:

參數(shù)描述取值范圍
number_samples數(shù)據(jù)集樣本數(shù)100-1000
difficulty問題難度系數(shù)1-5
problem定義數(shù)據(jù)集所用的函數(shù)classification = make_classification
moons = make_moons
circles = make_circles blobs = make_blobs Gaussian
quantiles = make_gaussian_quantiles
middle_layer網(wǎng)絡(luò)隱藏層數(shù)5-25
epochs訓(xùn)練迭代次數(shù)1000–25000

(2) 作為基線,比較 sklearn 的簡(jiǎn)單邏輯回歸(分類)模型:

def show_predictions(model, X, Y, name=""):""" display the labeled data X and a surface of prediction of model """x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.01), np.arange(y_min, y_max, 0.01))X_temp = np.c_[xx.flatten(), yy.flatten()]Z = model.predict(X_temp)plt.figure("Predictions " + name)plt.contourf(xx, yy, Z.reshape(xx.shape), cmap=plt.cm.Spectral)plt.ylabel('x2')plt.xlabel('x1')
plt.scatter(X[:, 0], X[:, 1],c=Y, s=40, cmap=plt.cm.Spectral)clf = sklearn.linear_model.LogisticRegressionCV()
clf.fit(X, Y)show_predictions(clf, X, Y, "Logistic regression")LR_predictions = clf.predict(X)
print("Logistic Regression accuracy : ", np.sum(LR_predictions == Y) / Y.shape[0])

下圖顯示了 show_predictions() 函數(shù)的輸出,該函數(shù)用于模型對(duì)數(shù)據(jù)的分類情況的可視化。

分類結(jié)果

(3) 創(chuàng)建 MLP 網(wǎng)絡(luò),對(duì)其進(jìn)行訓(xùn)練,并可視化運(yùn)行結(jié)果:

def sigmoid(x):return 1.0 / (1.0 + np.exp(-x)) ## Neural Network
class Neural_Network:def __init__(self, n_in, n_hidden, n_out):# Network dimensionsself.n_x = n_inself.n_h = n_hiddenself.n_y = n_out# Parameters initializationself.W1 = np.random.randn(self.n_h, self.n_x) * 0.01self.b1 = np.zeros((self.n_h, 1))self.W2 = np.random.randn(self.n_y, self.n_h) * 0.01self.b2 = np.zeros((self.n_y, 1))def forward(self, X):""" Forward computation """self.Z1 = self.W1.dot(X.T) + self.b1self.A1 = np.tanh(self.Z1)self.Z2 = self.W2.dot(self.A1) + self.b2self.A2 = sigmoid(self.Z2)def back_prop(self,  X, Y):""" Back-progagate gradient of the loss """m = X.shape[0]self.dZ2 = self.A2 - Yself.dW2 = (1 / m) * np.dot(self.dZ2, self.A1.T)self.db2 = (1 / m) * np.sum(self.dZ2, axis=1, keepdims=True)self.dZ1 = np.multiply(np.dot(self.W2.T, self.dZ2), 1 - np.power(self.A1, 2))self.dW1 = (1 / m) * np.dot(self.dZ1, X)self.db1 = (1 / m) * np.sum(self.dZ1, axis=1, keepdims=True)def train(self, X, Y, epochs, learning_rate=1.2):""" Complete process of learning, alternates forward pass,backward pass and parameters update """m = X.shape[0]for e in range(epochs):self.forward(X)loss = -np.sum(np.multiply(np.log(self.A2), Y) + np.multiply(np.log(1-self.A2),  (1 - Y))) / mself.back_prop(X, Y)self.W1 -= learning_rate * self.dW1self.b1 -= learning_rate * self.db1self.W2 -= learning_rate * self.dW2self.b2 -= learning_rate * self.db2if e % 1000 == 0:print("Loss ",  e, " = ", loss)def predict(self, X):""" Compute predictions with just a forward pass """self.forward(X)return np.round(self.A2).astype(np.int)nn = Neural_Network(2, middle_layer, 1)
nn.train(X, Y, epochs, 1.2)show_predictions(nn, X, Y, "Neural Network")nn_predictions = nn.predict(X)
print("Neural Network accuracy : ", np.sum(nn_predictions == Y) / Y.shape[0])

MLP 網(wǎng)絡(luò)的訓(xùn)練結(jié)果如下所示,使用 MLP 網(wǎng)絡(luò)的結(jié)果比 sklearn 的邏輯回歸模型性能更好。但這個(gè)簡(jiǎn)單的網(wǎng)絡(luò)仍然難以解決所有問題數(shù)據(jù)集。

輸出結(jié)果

下圖顯示了 MLP 網(wǎng)絡(luò)在圓圈問題集進(jìn)行訓(xùn)練后的輸出??梢钥吹?#xff0c;圓圈問題的準(zhǔn)確率為 50%,而月亮問題的準(zhǔn)確率為 89%

輸出結(jié)果

可以通過完成以下問題進(jìn)一步理解 MLP 及其訓(xùn)練過程:

  • 增加或減少樣本數(shù)量,然后重新運(yùn)行代碼
  • 更改問題類型和難度,然后在每次更改后重新運(yùn)行代碼
  • 更改模型參數(shù)和中間層,然后重新運(yùn)行

小結(jié)

在本文中, 我們了解了神經(jīng)網(wǎng)絡(luò)的相關(guān)基礎(chǔ)知識(shí),同時(shí)利用 Numpy 從零開始實(shí)現(xiàn)了神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過程——前向傳播和反向傳播,了解了神經(jīng)網(wǎng)絡(luò)的通用訓(xùn)練流程。

系列鏈接

遺傳算法與深度學(xué)習(xí)實(shí)戰(zhàn)(1)——進(jìn)化深度學(xué)習(xí)
遺傳算法與深度學(xué)習(xí)實(shí)戰(zhàn)(2)——生命模擬及其應(yīng)用
遺傳算法與深度學(xué)習(xí)實(shí)戰(zhàn)(3)——生命模擬與進(jìn)化論
遺傳算法與深度學(xué)習(xí)實(shí)戰(zhàn)(4)——遺傳算法(Genetic Algorithm)詳解與實(shí)現(xiàn)
遺傳算法與深度學(xué)習(xí)實(shí)戰(zhàn)(5)——遺傳算法中常用遺傳算子
遺傳算法與深度學(xué)習(xí)實(shí)戰(zhàn)(6)——遺傳算法框架DEAP
遺傳算法與深度學(xué)習(xí)實(shí)戰(zhàn)(7)——DEAP框架初體驗(yàn)
遺傳算法與深度學(xué)習(xí)實(shí)戰(zhàn)(8)——使用遺傳算法解決N皇后問題
遺傳算法與深度學(xué)習(xí)實(shí)戰(zhàn)(9)——使用遺傳算法解決旅行商問題
遺傳算法與深度學(xué)習(xí)實(shí)戰(zhàn)(10)——使用遺傳算法重建圖像
遺傳算法與深度學(xué)習(xí)實(shí)戰(zhàn)(11)——遺傳編程詳解與實(shí)現(xiàn)
遺傳算法與深度學(xué)習(xí)實(shí)戰(zhàn)(12)——粒子群優(yōu)化詳解與實(shí)現(xiàn)
遺傳算法與深度學(xué)習(xí)實(shí)戰(zhàn)(13)——協(xié)同進(jìn)化詳解與實(shí)現(xiàn)
遺傳算法與深度學(xué)習(xí)實(shí)戰(zhàn)(14)——進(jìn)化策略詳解與實(shí)現(xiàn)
遺傳算法與深度學(xué)習(xí)實(shí)戰(zhàn)(15)——差分進(jìn)化詳解與實(shí)現(xiàn)
遺傳算法與深度學(xué)習(xí)實(shí)戰(zhàn)(16)——神經(jīng)網(wǎng)絡(luò)超參數(shù)優(yōu)化
遺傳算法與深度學(xué)習(xí)實(shí)戰(zhàn)(17)——使用隨機(jī)搜索自動(dòng)超參數(shù)優(yōu)化
遺傳算法與深度學(xué)習(xí)實(shí)戰(zhàn)(18)——使用網(wǎng)格搜索自動(dòng)超參數(shù)優(yōu)化
遺傳算法與深度學(xué)習(xí)實(shí)戰(zhàn)(19)——使用粒子群優(yōu)化自動(dòng)超參數(shù)優(yōu)化
遺傳算法與深度學(xué)習(xí)實(shí)戰(zhàn)(20)——使用進(jìn)化策略自動(dòng)超參數(shù)優(yōu)化
遺傳算法與深度學(xué)習(xí)實(shí)戰(zhàn)(21)——使用差分搜索自動(dòng)超參數(shù)優(yōu)化

http://www.risenshineclean.com/news/66073.html

相關(guān)文章:

  • 手機(jī)網(wǎng)站制作方案微信群二維碼推廣平臺(tái)
  • 大型服裝網(wǎng)站開發(fā)代運(yùn)營(yíng)一般收費(fèi)
  • 網(wǎng)站建設(shè)規(guī)劃表福州百度網(wǎng)站排名優(yōu)化
  • 政府網(wǎng)站建設(shè)規(guī)范產(chǎn)品營(yíng)銷方案案例范文
  • 做零售出口的網(wǎng)站seo綜合查詢?cè)趺从玫?/a>
  • 怎么做全民奪寶網(wǎng)站網(wǎng)絡(luò)服務(wù)
  • 做民宿最大的網(wǎng)站百度競(jìng)價(jià)推廣代運(yùn)營(yíng)
  • 蘭州網(wǎng)站排名優(yōu)化公司惠城網(wǎng)站設(shè)計(jì)
  • 深圳公司網(wǎng)站制作互聯(lián)網(wǎng)營(yíng)銷的方式有哪些
  • 網(wǎng)頁設(shè)計(jì)網(wǎng)站免登陸企業(yè)培訓(xùn)體系
  • 一個(gè)網(wǎng)址建多個(gè)網(wǎng)站seo是什么意思?
  • 網(wǎng)站方案投放廣告
  • wordpress related posts福州整站優(yōu)化
  • 做的好的家裝網(wǎng)站網(wǎng)站頁面設(shè)計(jì)模板
  • 合肥網(wǎng)站設(shè)計(jì)建東莞百度seo推廣公司
  • 織夢(mèng)教育咨詢企業(yè)網(wǎng)站模板sem什么意思
  • 代理注冊(cè)公司有什么風(fēng)險(xiǎn)合肥seo排名優(yōu)化公司
  • 網(wǎng)站建設(shè)公司yu泰安網(wǎng)站推廣優(yōu)化
  • 網(wǎng)站主機(jī)一個(gè)g西安網(wǎng)絡(luò)推廣公司
  • 自建導(dǎo)航站wordpress百度網(wǎng)盤資源鏈接入口
  • 網(wǎng)站改版提案百度指數(shù)與百度搜索量
  • 域名備案需要哪些資料東莞網(wǎng)站建設(shè)優(yōu)化推廣
  • 微信上的網(wǎng)站怎么做百度seo搜索引擎優(yōu)化培訓(xùn)
  • 怎么用ftp工具上傳網(wǎng)站源碼武漢seo首頁優(yōu)化公司
  • vs2015網(wǎng)站開發(fā)基礎(chǔ)樣式百度客服
  • 域名 網(wǎng)站名稱手機(jī)系統(tǒng)流暢神器
  • 05網(wǎng)答案深圳關(guān)鍵詞優(yōu)化平臺(tái)
  • 開發(fā)區(qū)網(wǎng)站建設(shè)游戲代理是怎么賺錢的如何代理游戲
  • 訊杰網(wǎng)站建設(shè)南寧seo教程
  • 做網(wǎng)站余姚做運(yùn)營(yíng)需要具備什么能力