Python中從頭開始實現神經網路 介紹

2021-08-15 07:37:32 字數 2501 閱讀 3233

原文出處:

獲取**

在這篇文章中,我們將從頭開始實現乙個簡單的3層神經網路。 我們不會推導出所有需要的數**算,但是我會盡量直觀地解釋我們正在做什麼。 我也會指點資源給你閱讀細節。

在這裡,我假設你熟悉基本的微積分和機器學習的概念,例如 你知道什麼是分類和正規化。 理想情況下,您也可以了解梯度下降等優化技術的工作原理。 但是,即使你不熟悉以上任何一點,這篇文章仍然會變得有趣;

但為什麼從頭開始實施乙個神經網路呢? 即使您計畫在將來使用像pybrain這樣的神經網路庫,從頭開始至少實施一次網路也是非常有價值的練習。 它可以幫助您了解神經網路是如何工作的,這對於設計有效的模型是至關重要的。

有一點要注意的是,這裡的**示例並不是非常有效。 他們的意思是很容易理解。 在即將發布的文章中,我將**如何使用theano編寫高效的神經網路實現。 (更新:現在可用)

生成資料集

讓我們開始生成乙個我們可以玩的資料集。 幸運的是,scikit-learn有一些有用的資料集生成器,所以我們不需要自己編寫**。 我們將使用make_moons函式。

我們生成的資料集有兩個類,繪製成紅色和藍色的點。 你可以把藍點看作是男性患者,將紅點看作是女性患者,x軸和y軸是醫學測量。

我們的目標是訓練乙個機器學習分類器,**給定x和y座標的正確類別(女性的男性)。 請注意,資料不是線性可分的,我們不能繪製一條直線來分隔兩個類。 這意味著線性分類器(如logistic回歸)將無法適用資料,除非您手動設計對於給定資料集非常有效的非線性特徵(例如多項式)。

事實上,這是神經網路的主要優勢之一。 您不需要擔心功能工程。 神經網路的隱藏層將為您學習功能。

logistic回歸

為了證明這一點,讓我們訓練乙個logistic回歸分類器。 它的輸入是x和y值,輸出是**的類(0或1)。 為了讓我們的生活更輕鬆,我們使用scikit-learn的logistic regression類。

該圖顯示了我們的logistic回歸分類器學到的決策邊界。 它使用直線將資料盡可能分離,但無法捕捉資料的「月亮形狀」。

訓練乙個神經網路

現在我們來構建乙個具有乙個輸入層,乙個隱藏層和乙個輸出層的三層神經網路。 輸入層中節點的數量取決於我們資料的維數2.類似地,輸出層中節點的數量是由我們所擁有的類的數量決定的,也是2.(因為我們只有2個類, 實際上只能有乙個輸出節點**為0或1,但有2個可以使網路稍後擴充套件到更多類)。 網路的輸入將是x和y座標,其輸出將是兩個概率,乙個是0級(「女性」),乙個是1級(「男性」)。 它看起來像這樣:

我們可以選擇隱藏層的維數(節點數)。我們放入隱藏層的節點越多,我們就可以適應更複雜的功能。但更高的維度是有代價的。首先,需要更多的計算來進行**並學習網路引數。更多的引數也意味著我們更容易過擬合我們的資料。

如何選擇隱藏層的大小?雖然有一些一般的指導方針和建議,但它總是取決於你的具體問題,更多的是藝術而不是科學。稍後我們將使用隱藏的節點數來看看它是如何影響我們的輸出的。

我們還需要為隱藏層選擇乙個啟用函式。啟用功能將圖層的輸入轉換為其輸出。非線性啟用函式使我們能夠擬合非線性假設。用於啟用功能的常見選擇是tanh,sigmoid函式或relu。我們將使用tanh,在許多場景中表現相當好。這些函式的乙個很好的屬性是可以使用原始函式值來計算它們的派生值。例如,tanh x的導數是1- (tanh x)^2。這很有用,因為它可以讓我們計算一次tanh x並稍後重新使用它的值來得到導數。

因為我們希望我們的網路輸出概率,輸出層的啟用函式將是softmax,這只是將原始分數轉換為概率的一種方法。如果您熟悉邏輯功能,您可以將softmax視為對多個類的歸納

Deep Learning 從頭開始

deep learning已經火了好久,有些人已經在這裡面耕耘了好多年,而有些人才剛剛開始,比如本人。如何才能快速地進入這個領域在較短的時間內掌握deep learning最新的技術是值得思考的問題。就目前的情況看,通過網路上的課程及各種tutorials以及各種 來研究這個領域是最佳的途徑。經過一...

git從頭開始

當你本地修改了乙個檔案,而且該檔案被另乙個人修改,並push了,那麼 users terry workspace git練習 git practise git master git pull updating 67e4e18.cdbf666 error your local changes to t...

English 從頭開始

我們有好多事情都不能重新開始,比如我們的人生你沒有辦法把自己在塞回媽媽的肚子裡吧?比如我們的時間在此時此刻只有這乙個時間,全世界不會再有第二個。比如我們後悔的事情.雖然有很多我們無法改變的事情存在,但也有許多我們可以改變的事情。雖然我們沒有辦法從一歲開始重新開始,但我們可以掌握自己的人生,做自己想做...