<del id="d4fwx"><form id="d4fwx"></form></del>
      <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

            <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
          • python畫權(quán)重函數(shù),python求權(quán)重

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

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

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

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

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

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

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

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

            ? 一個輸入層,x

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

            ? 一個輸出層,?

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

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

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

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

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

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

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

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

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

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

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

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

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

            前向傳播

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

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

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

            損失函數(shù)

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

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

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

            反向傳播

            我們已經(jīng)度量出了預測的誤差(損失),現(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ù)。注意,為了簡單起見。我們只展示了假設網(wǎng)絡只有 1 層的偏導數(shù)。

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

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

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

            Youtube:

            整合并完成一個實例

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

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

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

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

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

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

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

            下一步是什么?

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

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

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

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

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

            最后的想法

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

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

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

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

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

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

            1.networkx的加載

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

            import networkx as nx

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

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

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

            G=nx.Graph()

            G=nx.DiGraph()

            G=nx.MultiGraph()

            G=nx.MultiDiGraph()

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

            3.在2中,創(chuàng)建的只是一副空圖,為了得到一個有節(jié)點、有邊的圖,一般采用下面這個函數(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ù)u和v,以及多個可選參數(shù)

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

            對于該函數(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

            有時候,當采用默認方式創(chuàng)建邊以后,我們可能還會往邊里面添加邊的相關(guān)參數(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}) #更新邊的信息

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

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

            默認創(chuàng)建節(jié)點之間的邊:

            1

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

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

            1

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

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

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

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

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

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

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

            1.where()按條件返回數(shù)組的索引值

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

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

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

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

            6.sign(a)返回數(shù)組a的每個元素的正負符號

            7.piecewise(a,[condlist],[funclist])數(shù)組a根據(jù)布爾型條件condlist返回對應元素結(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個數(shù)組

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

            數(shù)組修剪和壓縮

            1.a.clip(m,n)設置數(shù)組a的范圍為(m,n),數(shù)組中大于n的元素設定為n,小于m的元素設定為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所含元素的總個數(shù)

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

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

            數(shù)組計算

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

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

            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對角線上的元素7.a.trace()計算矩陣a的跡,即對角線元素之和

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

            當前標題:python畫權(quán)重函數(shù),python求權(quán)重
            本文地址:http://www.jbt999.com/article8/hedcip.html

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

            廣告

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

            微信小程序開發(fā)

              <del id="d4fwx"><form id="d4fwx"></form></del>
              <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

                    <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
                  • 国产免费小视频 | 成人做爰黄AA片免费看三区动漫 | 欧美色图日韩色图 | 国产3区在线观看 | 欧美大鸡吧操逼 |