欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

python畫權(quán)重函數(shù),python求權(quán)重

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

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

創(chuàng)新互聯(lián)建站主要從事成都做網(wǎng)站、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)滿洲,十多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18982081108

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

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

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

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

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

? 一個(gè)輸入層,x

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

? 一個(gè)輸出層,?

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

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

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

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

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

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

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

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

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

每步訓(xùn)練迭代包含以下兩個(gè)部分:

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

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

下面的順序圖展示了這個(gè)過程:

前向傳播

正如我們?cè)谏蠄D中看到的,前向傳播只是簡(jiǎn)單的計(jì)算。對(duì)于一個(gè)基本的 2 層網(wǎng)絡(luò)來說,它的輸出是這樣的:

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

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

損失函數(shù)

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

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

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

反向傳播

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

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

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

梯度下降法

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

但是我們不能直接計(jì)算損失函數(shù)對(duì)權(quán)值和偏置的導(dǎo)數(shù),因?yàn)樵趽p失函數(shù)的等式中并沒有顯式的包含他們。因此,我們需要運(yùn)用鏈?zhǔn)角髮?dǎo)發(fā)在來幫助計(jì)算導(dǎo)數(shù)。

鏈?zhǔn)椒▌t用于計(jì)算損失函數(shù)對(duì) W 和 b 的導(dǎo)數(shù)。注意,為了簡(jiǎn)單起見。我們只展示了假設(shè)網(wǎng)絡(luò)只有 1 層的偏導(dǎo)數(shù)。

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

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

為了更深入的理解微積分原理和反向傳播中的鏈?zhǔn)角髮?dǎo)法則,我強(qiáng)烈推薦 3Blue1Brown 的如下教程:

Youtube:

整合并完成一個(gè)實(shí)例

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

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

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

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

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

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

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

下一步是什么?

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

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

? 在訓(xùn)練網(wǎng)絡(luò)的時(shí)候應(yīng)用學(xué)習(xí)率

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

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

最后的想法

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

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

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

如何用python實(shí)現(xiàn)網(wǎng)絡(luò)圖節(jié)點(diǎn)權(quán)重的添加以及如何把一個(gè)非連通的大網(wǎng)絡(luò)圖分成多個(gè)小網(wǎng)絡(luò)圖

networkx是python的一個(gè)庫(kù),它為圖的數(shù)據(jù)結(jié)構(gòu)提供算法、生成器以及畫圖工具。近日在使用ryu進(jìn)行最短路徑獲取,可以通過該庫(kù)來簡(jiǎn)化工作量。該庫(kù)采用函數(shù)方式進(jìn)行調(diào)用相應(yīng)的api,其參數(shù)類型通常為圖對(duì)象。

函數(shù)API的調(diào)用,按照以下步驟來創(chuàng)建構(gòu)建圖:

1.networkx的加載

在python中調(diào)用networkx通常只需要將該庫(kù)導(dǎo)入即可

import networkx as nx

2.圖對(duì)象的創(chuàng)建

networkx提供了四種基本圖對(duì)象:Graph,DiGraph,MultiGraph,MultiDiGraph。

使用如下調(diào)用方式,可以創(chuàng)建以上四種圖對(duì)象的空?qǐng)D。

G=nx.Graph()

G=nx.DiGraph()

G=nx.MultiGraph()

G=nx.MultiDiGraph()

在 networkx中,圖的各個(gè)節(jié)點(diǎn)允許以哈希表對(duì)象來表示,而對(duì)于圖中邊的各個(gè)參量,則可以通過與邊相關(guān)聯(lián)的方式來標(biāo)識(shí),一般而言,對(duì)于權(quán)重,用weight作為keyword,而對(duì)于其他的參數(shù),使用者可以采用任何除weight以外的keyword來命名。

3.在2中,創(chuàng)建的只是一副空?qǐng)D,為了得到一個(gè)有節(jié)點(diǎn)、有邊的圖,一般采用下面這個(gè)函數(shù):

1

2

G.add_edge(1,2) #default edge data=1

G.add_edge(1,2) #specify edge data=0.9

add_edge()函數(shù),該函數(shù)在調(diào)用時(shí)需要傳入兩個(gè)參數(shù)u和v,以及多個(gè)可選參數(shù)

u和v即圖中的兩個(gè)節(jié)點(diǎn),如果圖中不存在節(jié)點(diǎn),在調(diào)用時(shí)會(huì)自動(dòng)將這兩個(gè)節(jié)點(diǎn)添加入內(nèi),同時(shí)構(gòu)建兩個(gè)節(jié)點(diǎn)之間的連接關(guān)系,可選參數(shù)通常指這條邊的權(quán)重等關(guān)系參量。需要注意的是,如果圖中已經(jīng)存在了這條邊,重新進(jìn)行添加時(shí)會(huì)對(duì)這條邊進(jìn)行跟新操作(也就是覆蓋了原有的信息)。

對(duì)于該函數(shù),除了上述的構(gòu)建方式以外,還有以下幾種方式來創(chuàng)建邊:

1

2

3

G.add_edge(*e) # single edge as tuple of two nodes

G.add_edge(1, 3, weight=7, capacity=15, length=342.7) #using many arguements to create edge

G.add_edges_from( [(1, 2)] ) # add edges from iterable container

有時(shí)候,當(dāng)采用默認(rèn)方式創(chuàng)建邊以后,我們可能還會(huì)往邊里面添加邊的相關(guān)參數(shù),這時(shí)候,可以采用下面的方式來更新邊的信息:

1

2

3

4

5

#For non-string attribute keys, use subscript notation.

G.add_edge(1, 2)

G[1][2].update({0: 5}) #更新邊的信息

G.edges[1, 2].update({0: 5}) #更新邊的信息

#上述兩種更新方式,擇一選取即可

細(xì)心的朋友可能注意到我在寫創(chuàng)建圖的內(nèi)容的時(shí)候,提到了add_edges_from()函數(shù),該函數(shù)也是用來創(chuàng)建邊的,該方式與add_edges()略有不同,比之a(chǎn)dd_edges()采用一個(gè)一個(gè)節(jié)點(diǎn)的方式進(jìn)行創(chuàng)建,它來的更為便利。這個(gè)函數(shù)在調(diào)用時(shí),需要一個(gè)節(jié)點(diǎn)元組作為參數(shù)以及多個(gè)可選參數(shù)作為邊的信息。你可以這么傳遞:

默認(rèn)創(chuàng)建節(jié)點(diǎn)之間的邊:

1

G.add_edges_from([(u,v)])

也可以這么寫,在創(chuàng)建的同時(shí)添加信息:

1

G.add_edges_from([(3, 4), (1, 4)], label='WN2898') 

通過上述方式,就構(gòu)建了一個(gè)3-4-1的圖的連接,并給每條邊打上了標(biāo)簽。

由此你就可以創(chuàng)建出自己的圖模型了。

Python基礎(chǔ) numpy中的常見函數(shù)有哪些

有些Python小白對(duì)numpy中的常見函數(shù)不太了解,今天小編就整理出來分享給大家。

Numpy是Python的一個(gè)科學(xué)計(jì)算的庫(kù),提供了矩陣運(yùn)算的功能,其一般與Scipy、matplotlib一起使用。其實(shí),list已經(jīng)提供了類似于矩陣的表示形式,不過numpy為我們提供了更多的函數(shù)。

數(shù)組常用函數(shù)

1.where()按條件返回?cái)?shù)組的索引值

2.take(a,index)從數(shù)組a中按照索引index取值

3.linspace(a,b,N)返回一個(gè)在(a,b)范圍內(nèi)均勻分布的數(shù)組,元素個(gè)數(shù)為N個(gè)

4.a.fill()將數(shù)組的所有元素以指定的值填充

5.diff(a)返回?cái)?shù)組a相鄰元素的差值構(gòu)成的數(shù)組

6.sign(a)返回?cái)?shù)組a的每個(gè)元素的正負(fù)符號(hào)

7.piecewise(a,[condlist],[funclist])數(shù)組a根據(jù)布爾型條件condlist返回對(duì)應(yīng)元素結(jié)果

8.a.argmax(),a.argmin()返回a最大、最小元素的索引

改變數(shù)組維度

a.ravel(),a.flatten():將數(shù)組a展平成一維數(shù)組

a.shape=(m,n),a.reshape(m,n):將數(shù)組a轉(zhuǎn)換成m*n維數(shù)組

a.transpose,a.T轉(zhuǎn)置數(shù)組a

數(shù)組組合

1.hstack((a,b)),concatenate((a,b),axis=1)將數(shù)組a,b沿水平方向組合

2.vstack((a,b)),concatenate((a,b),axis=0)將數(shù)組a,b沿豎直方向組合

3.row_stack((a,b))將數(shù)組a,b按行方向組合

4.column_stack((a,b))將數(shù)組a,b按列方向組合

數(shù)組分割

1.split(a,n,axis=0),vsplit(a,n)將數(shù)組a沿垂直方向分割成n個(gè)數(shù)組

2.split(a,n,axis=1),hsplit(a,n)將數(shù)組a沿水平方向分割成n個(gè)數(shù)組

數(shù)組修剪和壓縮

1.a.clip(m,n)設(shè)置數(shù)組a的范圍為(m,n),數(shù)組中大于n的元素設(shè)定為n,小于m的元素設(shè)定為m

2.a.compress()返回根據(jù)給定條件篩選后的數(shù)組

數(shù)組屬性

1.a.dtype數(shù)組a的數(shù)據(jù)類型

2.a.shape數(shù)組a的維度

3.a.ndim數(shù)組a的維數(shù)

4.a.size數(shù)組a所含元素的總個(gè)數(shù)

5.a.itemsize數(shù)組a的元素在內(nèi)存中所占的字節(jié)數(shù)

6.a.nbytes整個(gè)數(shù)組a所占的內(nèi)存空間7.a.astype(int)轉(zhuǎn)換a數(shù)組的類型為int型

數(shù)組計(jì)算

1.average(a,weights=v)對(duì)數(shù)組a以權(quán)重v進(jìn)行加權(quán)平均

2.mean(a),max(a),min(a),middle(a),var(a),std(a)數(shù)組a的均值、最大值、最小值、中位數(shù)、方差、標(biāo)準(zhǔn)差

3.a.prod()數(shù)組a的所有元素的乘積

4.a.cumprod()數(shù)組a的元素的累積乘積

5.cov(a,b),corrcoef(a,b)數(shù)組a和b的協(xié)方差、相關(guān)系數(shù)

6.a.diagonal()查看矩陣a對(duì)角線上的元素7.a.trace()計(jì)算矩陣a的跡,即對(duì)角線元素之和

以上就是numpy中的常見函數(shù)。更多Python學(xué)習(xí)推薦:PyThon學(xué)習(xí)網(wǎng)教學(xué)中心。

當(dāng)前標(biāo)題:python畫權(quán)重函數(shù),python求權(quán)重
本文地址:http://chinadenli.net/article8/hedcip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司品牌網(wǎng)站設(shè)計(jì)微信小程序企業(yè)網(wǎng)站制作網(wǎng)站設(shè)計(jì)網(wǎng)站營(yíng)銷

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)