您現在的位置是:首頁 > 農業
深度學習簡介:前饋神經網路FFNN(又名多層感知器MLP)
前饋調節是什麼意思
深度前饋神經網路(FFNN) -又名多層感知器(MLP)
人工神經網路(ANN)由許多相互連線的神經元組成:
來自人工神經網路(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)。以下是一些常用的啟用函式:
一些熱門啟用函式
例如-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)通常是另一個神經元的輸入。
神經元的輸出值經常作為人工神經網路(ANN)中其他神經元的輸入
Perceptron是最早的神經網路之一,僅由一個神經元組成
最早的神經網路之一被稱為感知器,它只有一個神經元。
感知器
感知器神經元的輸出作為最終的預測。
每個神經元都是一個線性二元分類器(例如輸出值> = 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)
(注意:我們在上面的示例中沒有包含任何學習演算法)
perceptron = Neuron(n_inputs = 3, bias = -0。1, weights = [0。7, 0。6, 1。4])perceptron([1。0, 0。5, -1。0])
-0。04999999999999999
請注意,透過調整權重和偏差的值,您可以調整神經元的 決策邊界。 (注意:神經元 透過更新其權重和偏差值來學習 ,以減少其決策的誤差)。
如果一個神經網路能滿足我們的需要(作為一個分類器),為什麼我們需要這麼多神經元呢?
限制:神經元是一個二元分類器,因為它只能學習區分兩個類(如藍色和紅色)的最大值。神經元是一個線性分類器,因為它的決策邊界是二維資料的直線(或三維資料的平面,等等)
不幸的是,單個神經元無法對非線性可分離資料進行分類,因為它們只能學習線性決策邊界。
然而,透過將神經元組合在一起,我們實際上是在組合它們的決策邊界。因此,由多個神經元組成的神經網路能夠學習非線性決策邊界。
神經元根據特定的網路結構連線在一起。儘管有不同的體系結構,但幾乎所有的體系結構都包含層。(注:同一層神經元不相互連線)
神經網路包含層
通常有一個輸入層(包含多個神經元等於資料中輸入特徵的數量),一個輸出層(包含多個等於類數的神經元)和一個隱藏層(包含任意數量的神經元) )。
深度神經網路包含多個隱藏層
可以有多個隱層來允許神經網路學習更復雜的決策邊界(任何具有多個隱層的神經網路都被認為是深度神經網路)。
讓我們建立一個深度神經網路來描繪這幅畫:
我們的人工神經網路將學習繪製一個示例影象(它將學習將特定顏色與影象的特定區域相關聯)
讓我們下載影象並將其畫素載入到一個數組中,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)
現在教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))
現在讓我們建立我們的ANN:
全連線前饋神經網路(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)
訓練好的網路現在可以預測任何座標(例如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)
可以嘗試更改超引數以獲得更好的結果。
推薦文章
- 女子自殺後遺囑被指“無效” 背後的故事令人唏噓不已
同時,周蘭芬並非無償而是因生活長期需要照顧,感恩周蘭芝和朱靜對她的長期照顧,表示將總金額的大部分份額贈予給周蘭芝和朱靜,故周蘭芬自書遺囑及贈予是對自己遺產作出處理,贈予並非擅自贈與,並未侵害陳建輝的合法權益,也沒有違反法律的規定...
- 直男會送的6件禮物,希望你準備得不在其中!網友:不如發紅包!
男生們,不要再送女生刻字的水杯了,不僅沒有創意,而且還很俗,甚至價格也很透明~高跟鞋送雙高跟鞋,看似沒有任何毛病,高貴又大氣,然而也依舊登上了直男禮物的榜單,當你在購買高跟鞋時,有沒有想到這是要當作禮物送給對方呢...
- 揹帶褲男孩蔡徐坤因籃球梗而爆火,他才是最後的贏家
蔡徐坤的粉絲是唯一一群立場不同的存在,真愛粉們的名字叫IKUN,她們平常會積極地為偶像做資料,是被蔡徐坤的顏值和才氣所征服...