全文共1674字,預計學習時長5分鐘
全文共1674字,預計學習時長5分鐘
圖源:zhihu
約翰,不可忽視直覺。因為直覺表示處理過快的數據,這讓有意識的人根本無法理解。——Sherlock Holmes 神經網絡龐大且復雜,對初學者非常不友好。 所以小芯帶來了本期文章——致力于為初學者創建最小的神經網絡。 而比起神經網絡背后的復雜數學和算法,通過創建最小的神經網絡并訓練它來完成一個簡單的任務,更能讓你對神經網絡如何工作有一個直觀的印象。 下面,我們開始吧~
圖源:blog.sina
神經網絡背后的想法
神經網絡是權重的集合。我們可以在一組輸入和輸出值(目標或標簽)上訓練神經網絡。神經網絡內部的權重與輸入相連并輸出結果。在訓練網絡時,權重會更新,這樣網絡就能嘗試匹配輸出值與目標值。簡而言之,神經網絡就是學習輸入和輸出之間的映射。現在,讓我們一起來看看所有這些是什么意思。
最小的神經網絡
以下是只有一個權重(w)的最小神經網絡。輸入一個值(x),乘以權重,結果就是網絡的輸出值。
由于這個神經網絡非常小,我們將在一個非常簡單的任務上對其進行訓練。我們的任務是向其提供任何數字,網絡應更改該數字的符號。例如,如果輸入3,則網絡應輸出-3。
利用Keras創建神經網絡
現在,我將在Keras中構建并訓練最小的神經網絡,這是一個深度學習庫。現在不需要深入了解語法,這只是為了有個直觀印象。
- import kerasfrom keras.layers import Densemodel = keras.models.Sequential()model.add(Dense(1, input_shape=(1,)))modelpile(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學習與發展的干貨如需轉載,請后臺留言,遵守轉載規范


