真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python定義激活函數(shù),python 激活

python有什么用 python的用法

1、Python的優(yōu)勢有必要作為第一步去了解,Python作為面向?qū)ο蟮哪_本語言,優(yōu)勢就是數(shù)據(jù)處理和挖掘,這也注定了它和AI、互聯(lián)網(wǎng)技術(shù)的緊密聯(lián)系。

創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供郁南網(wǎng)站建設(shè)、郁南做網(wǎng)站、郁南網(wǎng)站設(shè)計、郁南網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、郁南企業(yè)網(wǎng)站模板建站服務(wù),十多年郁南做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。

2、網(wǎng)站開發(fā)。Python數(shù)據(jù)處理很在線,用它編寫網(wǎng)站可以為大眾提供優(yōu)秀的服務(wù),主要使用django和flask框架,著名的網(wǎng)站像知乎、YouTube就是Python寫的。

3、自動化運維。Python運行在Linux系統(tǒng)上可以作為服務(wù)器腳本不停工作,實現(xiàn)對主機的自動化操作,自動登錄等就是應(yīng)用之一。

4、網(wǎng)絡(luò)爬蟲。顧名思義,從互聯(lián)網(wǎng)上爬取信息的腳本,主要由urllib、requests等庫編寫,實用性很強,我就曾寫過爬取5w數(shù)據(jù)量的爬蟲。在大數(shù)據(jù)風靡的時代,爬蟲絕對是新秀。

5、人工智能。AI使Python一戰(zhàn)成名,AI的實現(xiàn)可以通過tensorflow庫。我認為,神經(jīng)網(wǎng)絡(luò)的核心在于激活函數(shù)、損失函數(shù)和數(shù)據(jù),數(shù)據(jù)可以通過爬蟲獲得。訓練時大量的數(shù)據(jù)運算又是Python的show time。

6、當然以上只是Python應(yīng)用最多的領(lǐng)域,別的領(lǐng)域和這些往往存在交集,這里就不再贅述了,至于Python能不能寫外掛和游戲,下面我就告訴大家。

7、外掛是寫不了的,Python是腳本語言,不可能像易語言、C語言那樣流暢自如地編寫輔助。

8、游戲并不適合用Python開發(fā),Python雖有pygame庫,但是功能不強,游戲運行效率低下,寫游戲還是要靠游戲引擎。

原來ReLU這么好用!一文帶你深度了解ReLU激活函數(shù)!

在神經(jīng)網(wǎng)絡(luò)中,激活函數(shù)負責將來自節(jié)點的加權(quán)輸入轉(zhuǎn)換為該輸入的節(jié)點或輸出的激活。ReLU 是一個分段線性函數(shù),如果輸入為正,它將直接輸出,否則,它將輸出為零。它已經(jīng)成為許多類型神經(jīng)網(wǎng)絡(luò)的默認激活函數(shù),因為使用它的模型更容易訓練,并且通常能夠獲得更好的性能。在本文中,我們來詳細介紹一下ReLU,主要分成以下幾個部分:

1、Sigmoid 和 Tanh 激活函數(shù)的局限性

2、ReLU(Rectified Linear Activation Function)

3、如何實現(xiàn)ReLU

4、ReLU的優(yōu)點

5、使用ReLU的技巧

一個神經(jīng)網(wǎng)絡(luò)由層節(jié)點組成,并學習將輸入的樣本映射到輸出。對于給定的節(jié)點,將輸入乘以節(jié)點中的權(quán)重,并將其相加。此值稱為節(jié)點的summed activation。然后,經(jīng)過求和的激活通過一個激活函數(shù)轉(zhuǎn)換并定義特定的輸出或節(jié)點的“activation”。

最簡單的激活函數(shù)被稱為線性激活,其中根本沒有應(yīng)用任何轉(zhuǎn)換。 一個僅由線性激活函數(shù)組成的網(wǎng)絡(luò)很容易訓練,但不能學習復雜的映射函數(shù)。線性激活函數(shù)仍然用于預(yù)測一個數(shù)量的網(wǎng)絡(luò)的輸出層(例如回歸問題)。

非線性激活函數(shù)是更好的,因為它們允許節(jié)點在數(shù)據(jù)中學習更復雜的結(jié)構(gòu) 。兩個廣泛使用的非線性激活函數(shù)是 sigmoid 函數(shù)和 雙曲正切 激活函數(shù)。

Sigmoid 激活函數(shù) ,也被稱為 Logistic函數(shù)神經(jīng)網(wǎng)絡(luò),傳統(tǒng)上是一個非常受歡迎的神經(jīng)網(wǎng)絡(luò)激活函數(shù)。函數(shù)的輸入被轉(zhuǎn)換成介于0.0和1.0之間的值。大于1.0的輸入被轉(zhuǎn)換為值1.0,同樣,小于0.0的值被折斷為0.0。所有可能的輸入函數(shù)的形狀都是從0到0.5到1.0的 s 形。在很長一段時間里,直到20世紀90年代早期,這是神經(jīng)網(wǎng)絡(luò)的默認激活方式。

雙曲正切函數(shù) ,簡稱 tanh,是一個形狀類似的非線性激活函數(shù),輸出值介于-1.0和1.0之間。在20世紀90年代后期和21世紀初期,由于使用 tanh 函數(shù)的模型更容易訓練,而且往往具有更好的預(yù)測性能,因此 tanh 函數(shù)比 Sigmoid激活函數(shù)更受青睞。

Sigmoid和 tanh 函數(shù)的一個普遍問題是它們值域飽和了 。這意味著,大值突然變?yōu)?.0,小值突然變?yōu)?-1或0。此外,函數(shù)只對其輸入中間點周圍的變化非常敏感。

無論作為輸入的節(jié)點所提供的求和激活是否包含有用信息,函數(shù)的靈敏度和飽和度都是有限的。一旦達到飽和狀態(tài),學習算法就需要不斷調(diào)整權(quán)值以提高模型的性能。

最后,隨著硬件能力的提高,通過 gpu 的非常深的神經(jīng)網(wǎng)絡(luò)使用Sigmoid 和 tanh 激活函數(shù)不容易訓練。在大型網(wǎng)絡(luò)深層使用這些非線性激活函數(shù)不能接收有用的梯度信息。錯誤通過網(wǎng)絡(luò)傳播回來,并用于更新權(quán)重。每增加一層,錯誤數(shù)量就會大大減少。這就是所謂的 消失梯度 問題,它能有效地阻止深層(多層)網(wǎng)絡(luò)的學習。

雖然非線性激活函數(shù)的使用允許神經(jīng)網(wǎng)絡(luò)學習復雜的映射函數(shù),但它們有效地阻止了學習算法與深度網(wǎng)絡(luò)的工作。在2000年代后期和2010年代初期,通過使用諸如波爾茲曼機器和分層訓練或無監(jiān)督的預(yù)訓練等替代網(wǎng)絡(luò)類型,這才找到了解決辦法。

為了訓練深層神經(jīng)網(wǎng)絡(luò), 需要一個激活函數(shù)神經(jīng)網(wǎng)絡(luò),它看起來和行為都像一個線性函數(shù),但實際上是一個非線性函數(shù),允許學習數(shù)據(jù)中的復雜關(guān)系 。該函數(shù)還必須提供更靈敏的激活和輸入,避免飽和。

因此,ReLU出現(xiàn)了, 采用 ReLU 可以是深度學習革命中為數(shù)不多的里程碑之一 。ReLU激活函數(shù)是一個簡單的計算,如果輸入大于0,直接返回作為輸入提供的值;如果輸入是0或更小,返回值0。

我們可以用一個簡單的 if-statement 來描述這個問題,如下所示:

對于大于零的值,這個函數(shù)是線性的,這意味著當使用反向傳播訓練神經(jīng)網(wǎng)絡(luò)時,它具有很多線性激活函數(shù)的理想特性。然而,它是一個非線性函數(shù),因為負值總是作為零輸出。由于矯正函數(shù)在輸入域的一半是線性的,另一半是非線性的,所以它被稱為 分段線性函數(shù)(piecewise linear function ) 。

我們可以很容易地在 Python 中實現(xiàn)ReLU激活函數(shù)。

我們希望任何正值都能不變地返回,而0.0或負值的輸入值將作為0.0返回。

下面是一些修正的線性激活函數(shù)的輸入和輸出的例子:

輸出如下:

我們可以通過繪制一系列的輸入和計算出的輸出,得到函數(shù)的輸入和輸出之間的關(guān)系。下面的示例生成一系列從 -10到10的整數(shù),并計算每個輸入的校正線性激活,然后繪制結(jié)果。

運行這個例子會創(chuàng)建一個圖,顯示所有負值和零輸入都突變?yōu)?.0,而正輸出則返回原樣:

ReLU函數(shù)的導數(shù)是斜率。負值的斜率為0.0,正值的斜率為1.0。

傳統(tǒng)上,神經(jīng)網(wǎng)絡(luò)領(lǐng)域已經(jīng)不能是任何不完全可微的激活函數(shù),而ReLU是一個分段函數(shù)。從技術(shù)上講,當輸入為0.0時,我們不能計算ReLU的導數(shù),但是,我們可以假設(shè)它為0。

tanh 和 sigmoid 激活函數(shù)需要使用指數(shù)計算, 而ReLU只需要max(),因此他 計算上更簡單,計算成本也更低 。

ReLU的一個重要好處是,它能夠輸出一個真正的零值 。這與 tanh 和 sigmoid 激活函數(shù)不同,后者學習近似于零輸出,例如一個非常接近于零的值,但不是真正的零值。這意味著負輸入可以輸出真零值,允許神經(jīng)網(wǎng)絡(luò)中的隱層激活包含一個或多個真零值。這就是所謂的稀疏表示,是一個理想的性質(zhì),在表示學習,因為它可以加速學習和簡化模型。

ReLU看起來更像一個線性函數(shù),一般來說,當神經(jīng)網(wǎng)絡(luò)的行為是線性或接近線性時,它更容易優(yōu)化 。

這個特性的關(guān)鍵在于,使用這個激活函數(shù)進行訓練的網(wǎng)絡(luò)幾乎完全避免了梯度消失的問題,因為梯度仍然與節(jié)點激活成正比。

ReLU的出現(xiàn)使得利用硬件的提升和使用反向傳播成功訓練具有非線性激活函數(shù)的深層多層網(wǎng)絡(luò)成為可能 。

很長一段時間,默認的激活方式是Sigmoid激活函數(shù)。后來,Tanh成了激活函數(shù)。 對于現(xiàn)代的深度學習神經(jīng)網(wǎng)絡(luò),默認的激活函數(shù)是ReLU激活函數(shù) 。

ReLU 可以用于大多數(shù)類型的神經(jīng)網(wǎng)絡(luò), 它通常作為多層感知機神經(jīng)網(wǎng)絡(luò)和卷積神經(jīng)網(wǎng)絡(luò)的激活函數(shù) ,并且也得到了許多論文的證實。傳統(tǒng)上,LSTMs 使用 tanh 激活函數(shù)來激活cell狀態(tài),使用 Sigmoid激活函數(shù)作為node輸出。 而ReLU通常不適合RNN類型網(wǎng)絡(luò)的使用。

偏置是節(jié)點上具有固定值的輸入,這種偏置會影響激活函數(shù)的偏移,傳統(tǒng)的做法是將偏置輸入值設(shè)置為1.0。當在網(wǎng)絡(luò)中使用 ReLU 時, 可以將偏差設(shè)置為一個小值,例如0.1 。

在訓練神經(jīng)網(wǎng)絡(luò)之前,網(wǎng)絡(luò)的權(quán)值必須初始化為小的隨機值。當在網(wǎng)絡(luò)中使用 ReLU 并將權(quán)重初始化為以零為中心的小型隨機值時,默認情況下,網(wǎng)絡(luò)中一半的單元將輸出零值。有許多啟發(fā)式方法來初始化神經(jīng)網(wǎng)絡(luò)的權(quán)值,但是沒有最佳權(quán)值初始化方案。 何愷明的文章指出Xavier 初始化和其他方案不適合于 ReLU ,對 Xavier 初始化進行一個小的修改,使其適合于 ReLU,提出He Weight Initialization,這個方法更適用于ReLU 。

在使用神經(jīng)網(wǎng)絡(luò)之前對輸入數(shù)據(jù)進行縮放是一個很好的做法。這可能涉及標準化變量,使其具有零均值和單位方差,或者將每個值歸一化為0到1。如果不對許多問題進行數(shù)據(jù)縮放,神經(jīng)網(wǎng)絡(luò)的權(quán)重可能會增大,從而使網(wǎng)絡(luò)不穩(wěn)定并增加泛化誤差。 無論是否在網(wǎng)絡(luò)中使用 ReLU,這種縮放輸入的良好實踐都適用。

ReLU 的輸出在正域上是無界的。這意味著在某些情況下,輸出可以繼續(xù)增長。因此,使用某種形式的權(quán)重正則化可能是一個比較好的方法,比如 l1或 l2向量范數(shù)。 這對于提高模型的稀疏表示(例如使用 l 1正則化)和降低泛化誤差都是一個很好的方法 。

.

從零開始用Python構(gòu)建神經(jīng)網(wǎng)絡(luò)

從零開始用Python構(gòu)建神經(jīng)網(wǎng)絡(luò)

動機:為了更加深入的理解深度學習,我們將使用 python 語言從頭搭建一個神經(jīng)網(wǎng)絡(luò),而不是使用像 Tensorflow 那樣的封裝好的框架。我認為理解神經(jīng)網(wǎng)絡(luò)的內(nèi)部工作原理,對數(shù)據(jù)科學家來說至關(guān)重要。

這篇文章的內(nèi)容是我的所學,希望也能對你有所幫助。

神經(jīng)網(wǎng)絡(luò)是什么?

介紹神經(jīng)網(wǎng)絡(luò)的文章大多數(shù)都會將它和大腦進行類比。如果你沒有深入研究過大腦與神經(jīng)網(wǎng)絡(luò)的類比,那么將神經(jīng)網(wǎng)絡(luò)解釋為一種將給定輸入映射為期望輸出的數(shù)學關(guān)系會更容易理解。

神經(jīng)網(wǎng)絡(luò)包括以下組成部分

? 一個輸入層,x

? 任意數(shù)量的隱藏層

? 一個輸出層,?

? 每層之間有一組權(quán)值和偏置,W and b

? 為隱藏層選擇一種激活函數(shù),σ。在教程中我們使用 Sigmoid 激活函數(shù)

下圖展示了 2 層神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)(注意:我們在計算網(wǎng)絡(luò)層數(shù)時通常排除輸入層)

2 層神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)

用 Python 可以很容易的構(gòu)建神經(jīng)網(wǎng)絡(luò)類

訓練神經(jīng)網(wǎng)絡(luò)

這個網(wǎng)絡(luò)的輸出 ? 為:

你可能會注意到,在上面的等式中,輸出 ? 是 W 和 b 函數(shù)。

因此 W 和 b 的值影響預(yù)測的準確率. 所以根據(jù)輸入數(shù)據(jù)對 W 和 b 調(diào)優(yōu)的過程就被成為訓練神經(jīng)網(wǎng)絡(luò)。

每步訓練迭代包含以下兩個部分:

? 計算預(yù)測結(jié)果 ?,這一步稱為前向傳播

? 更新 W 和 b,,這一步成為反向傳播

下面的順序圖展示了這個過程:

前向傳播

正如我們在上圖中看到的,前向傳播只是簡單的計算。對于一個基本的 2 層網(wǎng)絡(luò)來說,它的輸出是這樣的:

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

但是我們還需要一個方法來評估預(yù)測結(jié)果的好壞(即預(yù)測值和真實值的誤差)。這就要用到損失函數(shù)。

損失函數(shù)

常用的損失函數(shù)有很多種,根據(jù)模型的需求來選擇。在本教程中,我們使用誤差平方和作為損失函數(shù)。

誤差平方和是求每個預(yù)測值和真實值之間的誤差再求和,這個誤差是他們的差值求平方以便我們觀察誤差的絕對值。

訓練的目標是找到一組 W 和 b,使得損失函數(shù)最好小,也即預(yù)測值和真實值之間的距離最小。

反向傳播

我們已經(jīng)度量出了預(yù)測的誤差(損失),現(xiàn)在需要找到一種方法來傳播誤差,并以此更新權(quán)值和偏置。

為了知道如何適當?shù)恼{(diào)整權(quán)值和偏置,我們需要知道損失函數(shù)對權(quán)值 W 和偏置 b 的導數(shù)。

回想微積分中的概念,函數(shù)的導數(shù)就是函數(shù)的斜率。

梯度下降法

如果我們已經(jīng)求出了導數(shù),我們就可以通過增加或減少導數(shù)值來更新權(quán)值 W 和偏置 b(參考上圖)。這種方式被稱為梯度下降法。

但是我們不能直接計算損失函數(shù)對權(quán)值和偏置的導數(shù),因為在損失函數(shù)的等式中并沒有顯式的包含他們。因此,我們需要運用鏈式求導發(fā)在來幫助計算導數(shù)。

鏈式法則用于計算損失函數(shù)對 W 和 b 的導數(shù)。注意,為了簡單起見。我們只展示了假設(shè)網(wǎng)絡(luò)只有 1 層的偏導數(shù)。

這雖然很簡陋,但是我們依然能得到想要的結(jié)果—損失函數(shù)對權(quán)值 W 的導數(shù)(斜率),因此我們可以相應(yīng)的調(diào)整權(quán)值。

現(xiàn)在我們將反向傳播算法的函數(shù)添加到 Python 代碼中

為了更深入的理解微積分原理和反向傳播中的鏈式求導法則,我強烈推薦 3Blue1Brown 的如下教程:

Youtube:

整合并完成一個實例

既然我們已經(jīng)有了包括前向傳播和反向傳播的完整 Python 代碼,那么就將其應(yīng)用到一個例子上看看它是如何工作的吧。

神經(jīng)網(wǎng)絡(luò)可以通過學習得到函數(shù)的權(quán)重。而我們僅靠觀察是不太可能得到函數(shù)的權(quán)重的。

讓我們訓練神經(jīng)網(wǎng)絡(luò)進行 1500 次迭代,看看會發(fā)生什么。 注意觀察下面每次迭代的損失函數(shù),我們可以清楚地看到損失函數(shù)單調(diào)遞減到最小值。這與我們之前介紹的梯度下降法一致。

讓我們看看經(jīng)過 1500 次迭代后的神經(jīng)網(wǎng)絡(luò)的最終預(yù)測結(jié)果:

經(jīng)過 1500 次迭代訓練后的預(yù)測結(jié)果

我們成功了!我們應(yīng)用前向和方向傳播算法成功的訓練了神經(jīng)網(wǎng)絡(luò)并且預(yù)測結(jié)果收斂于真實值。

注意預(yù)測值和真實值之間存在細微的誤差是允許的。這樣可以防止模型過擬合并且使得神經(jīng)網(wǎng)絡(luò)對于未知數(shù)據(jù)有著更強的泛化能力。

下一步是什么?

幸運的是我們的學習之旅還沒有結(jié)束,仍然有很多關(guān)于神經(jīng)網(wǎng)絡(luò)和深度學習的內(nèi)容需要學習。例如:

? 除了 Sigmoid 以外,還可以用哪些激活函數(shù)

? 在訓練網(wǎng)絡(luò)的時候應(yīng)用學習率

? 在面對圖像分類任務(wù)的時候使用卷積神經(jīng)網(wǎng)絡(luò)

我很快會寫更多關(guān)于這個主題的內(nèi)容,敬請期待!

最后的想法

我自己也從零開始寫了很多神經(jīng)網(wǎng)絡(luò)的代碼

雖然可以使用諸如 Tensorflow 和 Keras 這樣的深度學習框架方便的搭建深層網(wǎng)絡(luò)而不需要完全理解其內(nèi)部工作原理。但是我覺得對于有追求的數(shù)據(jù)科學家來說,理解內(nèi)部原理是非常有益的。

這種練習對我自己來說已成成為重要的時間投入,希望也能對你有所幫助


網(wǎng)站題目:python定義激活函數(shù),python 激活
本文鏈接:http://weahome.cn/article/hooeoj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部