您現在的位置是:首頁 > 農業

深度學習簡介:前饋神經網路FFNN(又名多層感知器MLP)

由 不靠譜的貓 發表于 農業2021-12-19
簡介神經元的輸出值經常作為人工神經網路(ANN)中其他神經元的輸入Perceptron是最早的神經網路之一,僅由一個神經元組成最早的神經網路之一被稱為感知器,它只有一個神經元

前饋調節是什麼意思

深度學習簡介:前饋神經網路FFNN(又名多層感知器MLP)

深度前饋神經網路(FFNN) -又名多層感知器(MLP)

人工神經網路(ANN)由許多相互連線的神經元組成:

深度學習簡介:前饋神經網路FFNN(又名多層感知器MLP)

來自人工神經網路(ANN)的單個神經元

每個神經元接受一些浮點數(例如1。0、0。5、-1。0),並將它們乘以一些稱為權重的其他浮點數(例如0。7,0。6,1。4)(1。0 * 0。7 = 0。7,0。5 * 0。6 = 0。3, -1。0 * 1。4 = -1。4)。權重作為一種機制,用於關注或忽略某些輸入。然後將加權輸入(例如0。7 + 0。3 + -1。4 = -0。4)和偏差值(例如-0。4 + -0。1 = -0。5)相加。

根據神經元的啟用函式(y = f(x)),將求和後的值(x)轉換為輸出值(y)。以下是一些常用的啟用函式:

深度學習簡介:前饋神經網路FFNN(又名多層感知器MLP)

一些熱門啟用函式

例如-0。5→-0。05,如果我們使用Leaky ReLU啟用函式:y = f(x) = f(-0。5) = max(0。1*-0。5, -0。5) = max(-0。05, -0。5) = -0。05

神經元的輸出值(例如-0。05)通常是另一個神經元的輸入。

深度學習簡介:前饋神經網路FFNN(又名多層感知器MLP)

神經元的輸出值經常作為人工神經網路(ANN)中其他神經元的輸入

深度學習簡介:前饋神經網路FFNN(又名多層感知器MLP)

Perceptron是最早的神經網路之一,僅由一個神經元組成

最早的神經網路之一被稱為感知器,它只有一個神經元。

深度學習簡介:前饋神經網路FFNN(又名多層感知器MLP)

感知器

感知器神經元的輸出作為最終的預測。

深度學習簡介:前饋神經網路FFNN(又名多層感知器MLP)

每個神經元都是一個線性二元分類器(例如輸出值> = 0表示藍色類,而輸出值<0表示紅色類)

讓我們編寫我們自己的感知器,Python程式碼如下:

import numpy as npclass Neuron: def __init__(self, n_inputs, bias = 0。, weights = None): self。b = bias if weights: self。ws = np。array(weights) else: self。ws = np。random。rand(n_inputs) def __call__(self, xs): return self。_f(xs @ self。ws + self。b) def _f(self, x): return max(x*。1, x)

深度學習簡介:前饋神經網路FFNN(又名多層感知器MLP)

(注意:我們在上面的示例中沒有包含任何學習演算法)

perceptron = Neuron(n_inputs = 3, bias = -0。1, weights = [0。7, 0。6, 1。4])perceptron([1。0, 0。5, -1。0])

深度學習簡介:前饋神經網路FFNN(又名多層感知器MLP)

-0。04999999999999999

深度學習簡介:前饋神經網路FFNN(又名多層感知器MLP)

請注意,透過調整權重和偏差的值,您可以調整神經元的 決策邊界。 (注意:神經元 透過更新其權重和偏差值來學習 ,以減少其決策的誤差)。

如果一個神經網路能滿足我們的需要(作為一個分類器),為什麼我們需要這麼多神經元呢?

深度學習簡介:前饋神經網路FFNN(又名多層感知器MLP)

限制:神經元是一個二元分類器,因為它只能學習區分兩個類(如藍色和紅色)的最大值。神經元是一個線性分類器,因為它的決策邊界是二維資料的直線(或三維資料的平面,等等)

不幸的是,單個神經元無法對非線性可分離資料進行分類,因為它們只能學習線性決策邊界。

深度學習簡介:前饋神經網路FFNN(又名多層感知器MLP)

然而,透過將神經元組合在一起,我們實際上是在組合它們的決策邊界。因此,由多個神經元組成的神經網路能夠學習非線性決策邊界。

深度學習簡介:前饋神經網路FFNN(又名多層感知器MLP)

神經元根據特定的網路結構連線在一起。儘管有不同的體系結構,但幾乎所有的體系結構都包含層。(注:同一層神經元不相互連線)

深度學習簡介:前饋神經網路FFNN(又名多層感知器MLP)

神經網路包含層

通常有一個輸入層(包含多個神經元等於資料中輸入特徵的數量),一個輸出層(包含多個等於類數的神經元)和一個隱藏層(包含任意數量的神經元) )。

深度學習簡介:前饋神經網路FFNN(又名多層感知器MLP)

深度神經網路包含多個隱藏層

可以有多個隱層來允許神經網路學習更復雜的決策邊界(任何具有多個隱層的神經網路都被認為是深度神經網路)。

讓我們建立一個深度神經網路來描繪這幅畫:

深度學習簡介:前饋神經網路FFNN(又名多層感知器MLP)

我們的人工神經網路將學習繪製一個示例影象(它將學習將特定顏色與影象的特定區域相關聯)

讓我們下載影象並將其畫素載入到一個數組中,Python程式碼如下:

!curl -O https://pmcvariety。files。wordpress。com/2018/04/twitter-logo。jpg?w=100&h=100&crop=1from PIL import Imageimage = Image。open(‘twitter-logo。jpg?w=100’)import numpy as npimage_array = np。asarray(image)

深度學習簡介:前饋神經網路FFNN(又名多層感知器MLP)

現在教ANN畫畫是一項監督學習任務,所以我們需要建立一個帶標籤的訓練集(我們的訓練資料將為每個輸入提供輸入和預期輸出標籤)。訓練輸入將有2個值(每個畫素的x、y座標)。

考慮到影象的簡單性,我們實際上可以用兩種方法來解決這個問題。分類問題(在給定xy座標的情況下,神經網路預測畫素屬於“藍色”類還是“灰色”類)或迴歸問題(在給定其座標的情況下,神經網路預測畫素的RGB值)。

如果將其視為迴歸問題:訓練輸出將有3個值(每個畫素的標準化r、g、b值)。

training_inputs,training_outputs = [],[]for row,rgbs in enumerate(image_array): for column,rgb in enumerate(rgbs): training_inputs。append((row,column)) r,g,b = rgb training_outputs。append((r/255,g/255,b/255))

深度學習簡介:前饋神經網路FFNN(又名多層感知器MLP)

現在讓我們建立我們的ANN:

深度學習簡介:前饋神經網路FFNN(又名多層感知器MLP)

全連線前饋神經網路(FFNN) - 又名多層感知器(MLP)

它應該在輸入層中有2個神經元(因為有2個值可以採用:x和y座標)。

它應該在輸出層有3個神經元(因為要學習3個值:r,g,b)。

隱藏層的數量和每個隱藏層中的神經元數量是兩個要進行實驗的超引數(以及我們將訓練它的epochs數,啟用函式等) - 我將使用10個隱藏層,每個隱藏層包含100個神經元(使其成為一個深度神經網路)

from sklearn。neural_network import MLPRegressorann = MLPRegressor(hidden_layer_sizes= tuple(100 for _ in range(10)))ann。fit(training_inputs, training_outputs)

深度學習簡介:前饋神經網路FFNN(又名多層感知器MLP)

訓練好的網路現在可以預測任何座標(例如x,y = 1,1)的歸一化rgb值。

ann。predict([[1,1]])

array([[0。95479563, 0。95626562, 0。97069882]])

讓我們使用ANN來預測每個座標的rgb值,並讓我們顯示整個影象的預測rgb值,看看效果如何

predicted_outputs = ann。predict(training_inputs)predicted_image_array = np。zeros_like(image_array)i = 0for row,rgbs in enumerate(predicted_image_array): for column in range(len(rgbs)): r,g,b = predicted_outputs[i] predicted_image_array[row][column] = [r*255,g*255,b*255] i += 1Image。fromarray(predicted_image_array)

深度學習簡介:前饋神經網路FFNN(又名多層感知器MLP)

深度學習簡介:前饋神經網路FFNN(又名多層感知器MLP)

可以嘗試更改超引數以獲得更好的結果。

推薦文章