導航:首頁 > 網路連接 > 組裝電腦訓練神經網路

組裝電腦訓練神經網路

發布時間:2023-01-05 07:20:10

1. 從零開始用Python構建神經網路

從零開始用Python構建神經網路
動機:為了更加深入的理解深度學習,我們將使用 python 語言從頭搭建一個神經網路,而不是使用像 Tensorflow 那樣的封裝好的框架。我認為理解神經網路的內部工作原理,對數據科學家來說至關重要。
這篇文章的內容是我的所學,希望也能對你有所幫助。
神經網路是什麼?
介紹神經網路的文章大多數都會將它和大腦進行類比。如果你沒有深入研究過大腦與神經網路的類比,那麼將神經網路解釋為一種將給定輸入映射為期望輸出的數學關系會更容易理解。
神經網路包括以下組成部分
? 一個輸入層,x
? 任意數量的隱藏層
? 一個輸出層,?
? 每層之間有一組權值和偏置,W and b
? 為隱藏層選擇一種激活函數,σ。在教程中我們使用 Sigmoid 激活函數
下圖展示了 2 層神經網路的結構(注意:我們在計算網路層數時通常排除輸入層)

2 層神經網路的結構
用 Python 可以很容易的構建神經網路類

訓練神經網路
這個網路的輸出 ? 為:

你可能會注意到,在上面的等式中,輸出 ? 是 W 和 b 函數。
因此 W 和 b 的值影響預測的准確率. 所以根據輸入數據對 W 和 b 調優的過程就被成為訓練神經網路。
每步訓練迭代包含以下兩個部分:
? 計算預測結果 ?,這一步稱為前向傳播
? 更新 W 和 b,,這一步成為反向傳播
下面的順序圖展示了這個過程:

前向傳播
正如我們在上圖中看到的,前向傳播只是簡單的計算。對於一個基本的 2 層網路來說,它的輸出是這樣的:

我們在 NeuralNetwork 類中增加一個計算前向傳播的函數。為了簡單起見我們假設偏置 b 為0:

但是我們還需要一個方法來評估預測結果的好壞(即預測值和真實值的誤差)。這就要用到損失函數。
損失函數
常用的損失函數有很多種,根據模型的需求來選擇。在本教程中,我們使用誤差平方和作為損失函數。
誤差平方和是求每個預測值和真實值之間的誤差再求和,這個誤差是他們的差值求平方以便我們觀察誤差的絕對值。
訓練的目標是找到一組 W 和 b,使得損失函數最好小,也即預測值和真實值之間的距離最小。
反向傳播
我們已經度量出了預測的誤差(損失),現在需要找到一種方法來傳播誤差,並以此更新權值和偏置。
為了知道如何適當的調整權值和偏置,我們需要知道損失函數對權值 W 和偏置 b 的導數。
回想微積分中的概念,函數的導數就是函數的斜率。

梯度下降法
如果我們已經求出了導數,我們就可以通過增加或減少導數值來更新權值 W 和偏置 b(參考上圖)。這種方式被稱為梯度下降法。
但是我們不能直接計算損失函數對權值和偏置的導數,因為在損失函數的等式中並沒有顯式的包含他們。因此,我們需要運用鏈式求導發在來幫助計算導數。

鏈式法則用於計算損失函數對 W 和 b 的導數。注意,為了簡單起見。我們只展示了假設網路只有 1 層的偏導數。
這雖然很簡陋,但是我們依然能得到想要的結果—損失函數對權值 W 的導數(斜率),因此我們可以相應的調整權值。
現在我們將反向傳播演算法的函數添加到 Python 代碼中

為了更深入的理解微積分原理和反向傳播中的鏈式求導法則,我強烈推薦 3Blue1Brown 的如下教程:
Youtube:https://youtu.be/tIeHLnjs5U8
整合並完成一個實例
既然我們已經有了包括前向傳播和反向傳播的完整 Python 代碼,那麼就將其應用到一個例子上看看它是如何工作的吧。

神經網路可以通過學習得到函數的權重。而我們僅靠觀察是不太可能得到函數的權重的。
讓我們訓練神經網路進行 1500 次迭代,看看會發生什麼。 注意觀察下面每次迭代的損失函數,我們可以清楚地看到損失函數單調遞減到最小值。這與我們之前介紹的梯度下降法一致。

讓我們看看經過 1500 次迭代後的神經網路的最終預測結果:

經過 1500 次迭代訓練後的預測結果
我們成功了!我們應用前向和方向傳播演算法成功的訓練了神經網路並且預測結果收斂於真實值。
注意預測值和真實值之間存在細微的誤差是允許的。這樣可以防止模型過擬合並且使得神經網路對於未知數據有著更強的泛化能力。
下一步是什麼?
幸運的是我們的學習之旅還沒有結束,仍然有很多關於神經網路和深度學習的內容需要學習。例如:
? 除了 Sigmoid 以外,還可以用哪些激活函數
? 在訓練網路的時候應用學習率
? 在面對圖像分類任務的時候使用卷積神經網路
我很快會寫更多關於這個主題的內容,敬請期待!
最後的想法
我自己也從零開始寫了很多神經網路的代碼
雖然可以使用諸如 Tensorflow 和 Keras 這樣的深度學習框架方便的搭建深層網路而不需要完全理解其內部工作原理。但是我覺得對於有追求的數據科學家來說,理解內部原理是非常有益的。
這種練習對我自己來說已成成為重要的時間投入,希望也能對你有所幫助

2. 怎麼選取訓練神經網路時的Batch size

在考慮這個問題時先要明白Batch size的意義。剛開始因為批量梯度下降法容易使得網路陷入局部收斂,並且樣本量太大,訓練速度很慢,因此就提出了隨機梯度下降法。不過當時的SGD演算法中的batch size=1,效果並不好,所以後面就又提出了mini-batch SGD,也就有了這里的batch size。
因此,batch size不能過小,不然每次所利用的樣本量太少,所包含的信息也少,我覺得至少8吧。當然也不能太大,不然就跟批量下降一樣的。所以建議取8~256左右,可以根據樣本量進行調整,當然還取決於你的電腦內存。

3. AlphaGo的神奇全靠它,詳解人工神經網路!

4. 如何訓練神經網路

1、先別著急寫代碼

訓練神經網路前,別管代碼,先從預處理數據集開始。我們先花幾個小時的時間,了解數據的分布並找出其中的規律。

Andrej有一次在整理數據時發現了重復的樣本,還有一次發現了圖像和標簽中的錯誤。所以先看一眼數據能避免我們走很多彎路。

由於神經網路實際上是數據集的壓縮版本,因此您將能夠查看網路(錯誤)預測並了解它們的來源。如果你的網路給你的預測看起來與你在數據中看到的內容不一致,那麼就會有所收獲。

一旦從數據中發現規律,可以編寫一些代碼對他們進行搜索、過濾、排序。把數據可視化能幫助我們發現異常值,而異常值總能揭示數據的質量或預處理中的一些錯誤。

2、設置端到端的訓練評估框架

處理完數據集,接下來就能開始訓練模型了嗎?並不能!下一步是建立一個完整的訓練+評估框架。

在這個階段,我們選擇一個簡單又不至於搞砸的模型,比如線性分類器、CNN,可視化損失。獲得准確度等衡量模型的標准,用模型進行預測。

這個階段的技巧有:

· 固定隨機種子

使用固定的隨機種子,來保證運行代碼兩次都獲得相同的結果,消除差異因素。

· 簡單化

在此階段不要有任何幻想,不要擴增數據。擴增數據後面會用到,但是在這里不要使用,現在引入只會導致錯誤。

· 在評估中添加有效數字

在繪制測試集損失時,對整個測試集進行評估,不要只繪制批次測試損失圖像,然後用Tensorboard對它們進行平滑處理。

· 在初始階段驗證損失函數

驗證函數是否從正確的損失值開始。例如,如果正確初始化最後一層,則應在softmax初始化時測量-log(1/n_classes)。

· 初始化

正確初始化最後一層的權重。如果回歸一些平均值為50的值,則將最終偏差初始化為50。如果有一個比例為1:10的不平衡數據集,請設置對數的偏差,使網路預測概率在初始化時為0.1。正確設置這些可以加速模型的收斂。

· 人類基線

監控除人為可解釋和可檢查的損失之外的指標。盡可能評估人的准確性並與之進行比較。或者對測試數據進行兩次注釋,並且對於每個示例,將一個注釋視為預測,將第二個注釋視為事實。

· 設置一個獨立於輸入的基線

最簡單的方法是將所有輸入設置為零,看看模型是否學會從輸入中提取任何信息。

· 過擬合一個batch

增加了模型的容量並驗證我們可以達到的最低損失。

· 驗證減少訓練損失

嘗試稍微增加數據容量。

5. 深度神經網路具體的工作流程是什麼樣的

所謂神經網路演算法,就是對人類學習能力的一種模擬演算法。理論認為人的認知模式,處事方式是存儲在神經元與神經元之間的連接上的,稱為「神經元連接權重」,人腦神經布局類似網狀結構,神經元是網的交叉點,權重就是網的連線,這些連線有粗有細,也就是權重的大小不同。而人類的學習能力就是去不斷改變權重的值,從而改變自己的認知模式和處事方式,簡單的說,不同人對同一個外部事物有不同看法,就是因為同樣的初始信號,在不同粗細的神經元連線放大或縮小後,變成了側重點不同的最終信號。最開始的「感知機"只用了2層神經元,即輸入層和輸出層,發現很多問題無法模擬,最著名的就是「異或」問題。 後來聰明的人在輸入層和輸出層之間加了一層神經元叫做隱藏層,3層的神經網路已經可以模擬二維上的任意函數曲線。只不過此時對「連接權重」的訓練過程就變得非常復雜,通常使用一種叫「誤差反傳」的計算方法。參考人腦,人腦大概有億級層數的神經元(當然,人腦是多任務處理器集合,某些特定的任務如人臉識別,只需用到大腦的某個局部)。於是人們會猜想,更多的隱藏層是否會有更高的學習效果。事實證明的確如此,隨著隱藏層數的增加,一些圖片,語音的識別率越來越高。因此,就有了深度神經網路這一概念。但隱藏層數越多訓練過程也越復雜,且誤差會在多層傳遞的時候衰減,導致GradientVanish問題,最終導致訓練結果收斂在局部最優或者難以收斂。後來又有聰明的人不斷改進誤差訓練演算法,神經網路的層數深度越來越大,現在最NB的是微軟的「殘差神經網路」,已經將隱藏層提高至152層。

6. RTX 2060Super可以用作機器學習、神經網路訓練么

當然可以,顯卡能不能用於這些深度學習演算法訓練,主要看有沒有cuda單元。 super的意思只是cuda單元增加了,所以肯定能用,而且比普通版的要好

閱讀全文

與組裝電腦訓練神經網路相關的資料

熱點內容
無線網路建立區域網 瀏覽:889
啟用網路共享是哪個伺服器 瀏覽:401
網路正常就是不能上百度怎麼回事 瀏覽:178
中職學校計算機網路資料 瀏覽:193
新手機聯網了卻說無網路連接 瀏覽:6
無線網路可以連接列印機嗎 瀏覽:572
網路時代的手機游戲 瀏覽:909
我可以這個網路流行語發源於哪裡 瀏覽:357
路由器網路波動大了怎麼辦 瀏覽:366
聯通手機用戶的網路 瀏覽:551
路由器一直在重復獲取網路 瀏覽:254
禁止電腦網路共享 瀏覽:28
bp神經網路怎麼設置隱含層節點數 瀏覽:335
計算機網路的考級 瀏覽:381
迷你世界怎麼改網路 瀏覽:385
玉溪企業網路營銷策劃方案 瀏覽:4
防沉迷網路游戲有什麼幫助 瀏覽:76
河科大網路客戶端手機怎樣下載 瀏覽:278
2021年國家網路安全宣傳周知識競賽 瀏覽:256
光聯智能網路設置 瀏覽:42

友情鏈接