今天也在為複雜的神經網路苦惱?從創建最小的神經網路開始吧~
全文共1674字,預計學習時長5分鐘
圖源:zhihu約翰,不可忽視直覺。因為直覺表示處理過快的數據,這讓有意識的人根本無法理解。——Sherlock Holmes
神經網路龐大且複雜,對初學者非常不友好。
所以小芯帶來了本期文章——致力於為初學者創建最小的神經網路。
而比起神經網路背後的複雜數學和演算法,通過創建最小的神經網路並訓練它來完成一個簡單的任務,更能讓你對神經網路如何工作有一個直觀的印象。
下面,我們開始吧~
圖源:blog.sina.com.cn神經網路背後的想法
神經網路是權重的集合。我們可以在一組輸入和輸出值(目標或標籤)上訓練神經網路。神經網路內部的權重與輸入相連並輸出結果。在訓練網路時,權重會更新,這樣網路就能嘗試匹配輸出值與目標值。簡而言之,神經網路就是學習輸入和輸出之間的映射。現在,讓我們一起來看看所有這些是什麼意思。
最小的神經網路
以下是只有一個權重(w)的最小神經網路。輸入一個值(x),乘以權重,結果就是網路的輸出值。
由於這個神經網路非常小,我們將在一個非常簡單的任務上對其進行訓練。我們的任務是向其提供任何數字,網路應更改該數字的符號。例如,如果輸入3,則網路應輸出-3。
利用Keras創建神經網路
現在,我將在Keras中構建並訓練最小的神經網路,這是一個深度學習庫。現在不需要深入了解語法,這只是為了有個直觀印象。
import kerasfrom keras.layers import Densemodel = keras.models.Sequential()model.add(Dense(1, input_shape=(1,)))model.compile(loss="mse", optimizer="adam")view rawsmallest_nn.py hostedwith by GitHub
創建一個神經網路
太棒了!我們創建了只有一個權重的神經網路。現在,我們來創建用於訓練神經網路的訓練數據。
創建數據
import numpy as npdata_input = np.random.normal(size=100000)data_label =-(data_input)view rawsmallest_nn_data.py hostedwith by GitHub
創建訓練數據
我們也創建了訓練數據。數據包含10萬個隨機數,標籤為該數字的負數。用剛剛創建的數據來訓練網路。
訓練網路
首先,隨機初始化神經網路的權重。隨著不斷訓練網路,權重也會隨之更新。開始訓練之前,請先檢查權重。
訓練之前的權重現在把數據放入網路中進行擬合。擬合只不過是訓練的另一個名稱。
訓練網路我們已經訓練完了網路。正如你在進度條中看到的一樣,網路是在10萬個樣本上訓練的。現在向網路輸入一個值並觀察反應。
觀察反應網路幾乎完成了任務。輸出值與輸入數字非常接近,而且符號相反。因為我們將在更多的數據上訓練這個網路,所以輸出結果會越來越接近目標值。看一下現在的權值。
訓練後的權重當我們對網路進行數據訓練時,權重從0.42變為-1左右。很顯然,一個數字只有乘以-1才能改變該數字的符號。
圖源:ofoto.cc作為一個函數逼近器,基本上神經網路可以通過調整它的權值來學習任何輸入值和輸出值之間的映射。一旦它學會了這種映射,它就可以給任何一個輸入值生成一個近似的輸出值。
所以,即使你是初學者,也不要怕,從創建最小的神經網路開始吧~
留言點贊關注
我們一起分享AI學習與發展的乾貨
如轉載,請後台留言,遵守轉載規範