使用Python構(gòu)建Hopfield網(wǎng)絡(luò)的教程
熱的東西顯然會(huì)變涼。房間會(huì)會(huì)人沮喪地變得凌亂。幾乎同樣,消息會(huì)失真。逆轉(zhuǎn)這些情況的短期策略分別是重新加熱、 做衛(wèi)生和使用 Hopfield 網(wǎng)絡(luò)。本文向您介紹了三者中的最后一個(gè),它是一個(gè)只需要特定的參數(shù)就可以消除噪聲的算法。net.py 是一個(gè)特別簡(jiǎn)單的 Python 實(shí)現(xiàn),將向您展示它的基本部分如何結(jié)合到一起,以及為何 Hopfield 網(wǎng)絡(luò)有時(shí)可以自失真的圖案中 重新得到原圖案。盡管這個(gè)實(shí)現(xiàn)有局限性,不過(guò)仍然可以讓您獲得關(guān)于 Hopfield 網(wǎng)絡(luò)的很多有益且有啟發(fā)作用的經(jīng)驗(yàn)。
您尋求的是什么?
我假定您是因?yàn)橛龅搅艘恍┯?jì)算上的問(wèn)題而來(lái)閱讀本文。有人向您建議,一些神經(jīng)網(wǎng)絡(luò)算法可能會(huì)提供解決方案。具體說(shuō), 建議是說(shuō)您可以使用一個(gè) Hopfield 網(wǎng)絡(luò)。我進(jìn)一步假設(shè)您需要有一個(gè)大致的想法,以使得您可以決定那個(gè)建議是否切實(shí) 可行而且確保深入的研究。下面這個(gè) Hopfield 網(wǎng)絡(luò)的非??s略的應(yīng)用可能會(huì)引導(dǎo)您著手解決問(wèn)題。
首先,您的問(wèn)題有一組基本的用 -1 和 +1 編碼的圖案。如果需要,它們可以用 0 和 +1 編碼。這些圖案可以是郵票的規(guī)格化的 二進(jìn)制圖案(參閱 參考資料)。下一個(gè)要素是偏離這一基礎(chǔ)的一組圖案。您尋求的是創(chuàng)建代碼,以 使得可以輸入不正常的圖案而輸出應(yīng)得的一個(gè)基本圖案。因而您尋求的將是一個(gè)算法,可以輸入一個(gè)對(duì)特定郵票的編碼描述,然后 輸出應(yīng)得的一個(gè)基本郵票圖案。您搜索不確定會(huì)成功。有可以接受的對(duì)您的計(jì)劃產(chǎn)生負(fù)面影響的失敗率。對(duì)您來(lái)說(shuō),會(huì)有一個(gè)不 會(huì)顯著地影響您的項(xiàng)目的郵票誤識(shí)別的比率。
如果這使您想起了您的問(wèn)題,下面可能會(huì)是您的解決方案設(shè)計(jì)的開(kāi)始。在結(jié)束之前,您最好應(yīng)該能回答出基本的問(wèn)題。 這個(gè) Hopfield 是什么?它如何工作?它的局限性是什么?它可以為我做什么?我希望用更多的時(shí)間來(lái)研究它嗎?
圖案及其失真
讓我們首先來(lái)看將會(huì)失真而隨后被重新獲得的五個(gè)任意圖案。它們可以可視化地表示為 10 乘 10 的黑白方塊矩陣。圖 1 展示了第一個(gè)圖案,p1。
圖 1. p1 的可視化表示
點(diǎn)擊 net.py 中 p2到 p5 的任意一個(gè),可以顯示其他的圖案。為了編碼,這五個(gè)圖案被初始描述為 Python 列表。 這樣,舉例來(lái)說(shuō),第一個(gè)圖案的描述見(jiàn)清單 1。
清單 1. 圖案 p1
p1 = [ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [-1, -1, -1, -1, -1, -1, -1, -1, 1, 1], [-1, -1, -1, -1, -1, -1, -1, -1, 1, 1], [-1, -1, -1, -1, -1, -1, -1, -1, 1, 1], [-1, -1, -1, -1, -1, -1, -1, -1, 1, 1], [-1, -1, -1, -1, -1, -1, -1, -1, 1, 1], [-1, -1, -1, -1, -1, -1, -1, -1, 1, 1], [-1, -1, -1, -1, -1, -1, -1, -1, 1, 1], [-1, -1, -1, -1, -1, -1, -1, -1, 1, 1], [-1, -1, -1, -1, -1, -1, -1, -1, 1, 1] ]
黑色和白色的方塊分別對(duì)應(yīng)于 -1 和 +1。這個(gè)列表隨后被轉(zhuǎn)化為一個(gè)數(shù)組。(請(qǐng)參閱 參考資料 ,獲得 我使用的 Python 庫(kù)的參考。)對(duì)應(yīng)于這類(lèi)圖案中的每一個(gè)元素,-1 或者 +1,在節(jié)點(diǎn)數(shù)組中都有一個(gè)節(jié)點(diǎn)對(duì)象。
一個(gè)節(jié)點(diǎn)對(duì)象有三個(gè)主要屬性:
- 一個(gè)節(jié)點(diǎn)對(duì)象有一個(gè)值,它是圖案中的一個(gè)元素。
- 一個(gè)節(jié)點(diǎn)還有一個(gè)地址,也就是在數(shù)組中它的地址。
- 每個(gè)節(jié)點(diǎn)還有一個(gè)顏色,以使得它可以顯示出來(lái)。
如前所述,Hopfield 的一個(gè)功能是消除噪聲。為實(shí)現(xiàn)這一功能,需要有一種方法來(lái)給圖案引入噪聲。點(diǎn)擊 Add Noise 恰好 可以完成此任務(wù)。向 p1 添加噪聲生成了圖 2。
圖 2. 失真的 p1
為了給一個(gè)圖案引入噪聲,Hopfield 要訪問(wèn)節(jié)點(diǎn)數(shù)組中的每一個(gè)地址。然后它會(huì)在 [0,1) 中取一個(gè)隨機(jī)數(shù),也就是 0 到 1 之間 包括 0 但不包括 1。如果數(shù)字小于某個(gè)固定的標(biāo)準(zhǔn),網(wǎng)絡(luò)就會(huì)改變節(jié)點(diǎn)的值和顏色,否則就會(huì)保持不變。默認(rèn)情況下,這個(gè)標(biāo)準(zhǔn)設(shè)置 為 0.20,這樣任意給定的節(jié)點(diǎn)就有百分之二十的可能會(huì)改變其值和顏色。您可以用調(diào)節(jié)滑塊來(lái)改變這個(gè)概率。調(diào)為 0% 時(shí),不會(huì)有噪聲, 調(diào)為 100% 時(shí),節(jié)點(diǎn)數(shù)組會(huì)簡(jiǎn)單地反轉(zhuǎn)。取這區(qū)間的值,會(huì)出現(xiàn)所有其他通常的可能。每個(gè)值都會(huì)給一個(gè)圖案引入特定程度的噪聲。由于 Hopfield 網(wǎng)絡(luò)是一個(gè)消除噪聲的算法,它可以輸入一個(gè)如圖 2 所示的失真的圖案,然后輸出圖 1 中的原始圖案。
盡管有時(shí)會(huì)因不合適的解釋而變得晦澀,相關(guān)的算法實(shí)現(xiàn)起來(lái)還是相當(dāng)簡(jiǎn)單的。接下來(lái),我將向您完整地介紹算法的一個(gè)實(shí)現(xiàn), 然后我將簡(jiǎn)短解釋為什么這些算法可以消除噪聲。
權(quán)重
如 David Mertz 和我在以前的一篇 developerWorks 文章 An introduction to neural nets 中所述, 人類(lèi)的大腦由大約 1 千億個(gè)神經(jīng)元構(gòu)成,平均每個(gè)神經(jīng)元要連接到幾千個(gè)其他神經(jīng)元。神經(jīng)元既接收也發(fā)送不同的能量。 神經(jīng)元的一個(gè)重要特性是,它們接收到能量后不會(huì)馬上反應(yīng)。而是,它們積累所接收到的能量,只有當(dāng)積累的能量達(dá)到一定臨界 極限時(shí),它們才會(huì)向其他神經(jīng)元發(fā)送自己的能量。
當(dāng)大腦在學(xué)習(xí)時(shí),可以認(rèn)為它是在調(diào)整這些連接的數(shù)目和強(qiáng)度。毫無(wú)疑問(wèn),這是一個(gè)極其簡(jiǎn)化的生物學(xué)事實(shí)。 在這個(gè)例子中,對(duì)于實(shí)現(xiàn)控制神經(jīng)網(wǎng)絡(luò)而言,簡(jiǎn)化可以是實(shí)用的,尤其是當(dāng)它們被作為模型來(lái)使用時(shí)。從生物學(xué)到算法的轉(zhuǎn)換是通過(guò) 將連接轉(zhuǎn)化為權(quán)重來(lái)實(shí)現(xiàn)的。(感知器以一種不同的而且可能更為直觀的方式來(lái)使用權(quán)重。閱讀這里之前,您可能會(huì)希望再讀一遍 An introduction to neural nets。)
權(quán)重對(duì)象主要封裝一個(gè)表示一個(gè)節(jié)點(diǎn)與另一個(gè)節(jié)點(diǎn)之間的權(quán)重的數(shù)值。權(quán)重對(duì)象還有一個(gè)地址和一個(gè)顏色。地址是它在權(quán)重?cái)?shù)組中的位置。 顏色用于顯示。圖 3 是權(quán)重?cái)?shù)組的一種可能的表示。Net.py(請(qǐng)參閱 參考資料 中的鏈接)保持了對(duì)最低和最高 權(quán)重的追蹤,它將權(quán)重顯示中顯示顏色數(shù)值的一個(gè)鍵。
圖 3. 權(quán)重?cái)?shù)組的一種可視化表示
在權(quán)重?cái)?shù)組的每一行上,是一個(gè)給定節(jié)點(diǎn)與所有其他節(jié)點(diǎn)間權(quán)重的一個(gè)列表。Hopfield 網(wǎng)絡(luò)有兩種形式。一種形式的節(jié)點(diǎn)有一個(gè)到 自身的權(quán)重,另一種形式則沒(méi)有。通過(guò) net.py 獲得的經(jīng)驗(yàn)表明,當(dāng)節(jié)點(diǎn)不是自權(quán)重(self-weighted)時(shí),節(jié)點(diǎn)數(shù)組不會(huì)總是重構(gòu)到自身。 選擇 No Self Weight 選項(xiàng),然后嘗試重構(gòu) p3 或 p5。有一百個(gè)節(jié)點(diǎn),所以有一萬(wàn)個(gè)通常冗余的權(quán)重。默認(rèn)情況下,當(dāng)節(jié)點(diǎn)是 自權(quán)重時(shí),就會(huì)有 5050 個(gè)非冗余權(quán)重,否則就只有 4950 個(gè)。
圖 4. 權(quán)重的起源
清單 2. 權(quán)重生成算法
PAT = { x: x is a RxC pattern }
WA = { x: x is a (R*C)x(R*C) weight array }
For all (i,j) and (a,b) in the range of R and C:
SUM = 0
for p in PAT:
SUM += p(i,j) * p(a,b)
WA( (R*i)+j, (C*a)+b ) = SUM
受生物學(xué)啟發(fā)的概念是 1949 年 Donald Hebb 研究所得的 Hopfield 網(wǎng)絡(luò)的基礎(chǔ)。他假定如果一對(duì)節(jié)點(diǎn)同時(shí)向?qū)Ψ桨l(fā)送它們的能量, 那么它們之間的權(quán)重就要大于只有一個(gè)發(fā)送自己的能量的情況。他寫(xiě)道:“當(dāng)細(xì)胞 A 的一個(gè)軸突距離 B 足夠近以至于能刺激它,而且 能反復(fù)持久地參與對(duì)它的激發(fā)時(shí),一個(gè)或者全部?jī)蓚€(gè)細(xì)胞中就會(huì)發(fā)生一些成長(zhǎng)過(guò)程或新陳代謝的變化,這樣,作為激發(fā) B 的一個(gè)細(xì)胞, A 的功效就會(huì)增長(zhǎng)”(參閱 參考資料 以獲得詳細(xì)資料)。就 Hopfield 網(wǎng)絡(luò)來(lái)說(shuō),當(dāng)一對(duì)節(jié)點(diǎn)有相同的 值時(shí),換句話說(shuō)是 -1 或 +1,它們之間的權(quán)重就更大。所有可能的節(jié)點(diǎn)對(duì)的值的乘積的和決定的權(quán)重?cái)?shù)組的內(nèi)容。當(dāng)兩個(gè)值相同時(shí),它們 的乘積就是正的,和就會(huì)增加。在不同的值的情況下,這個(gè)和就會(huì)減小。
更詳細(xì)地講,權(quán)重是哪里來(lái)的?首先,Hopfield 網(wǎng)絡(luò)必須可以訪問(wèn)一個(gè)庫(kù)或者一組基本圖案。在這里即 p1 到 p5。權(quán)重的生成首先由 Hopfield 網(wǎng)絡(luò)在基本圖案矩陣的界限內(nèi)選擇一對(duì)坐標(biāo)。然后它訪問(wèn)每個(gè)圖案中的對(duì)應(yīng)節(jié)點(diǎn)。在每一步,它將節(jié)點(diǎn)值的乘積添加到一個(gè) 正在使用的和。(見(jiàn)圖 4)。當(dāng)網(wǎng)絡(luò)訪問(wèn)過(guò)每一個(gè)圖案后,它將一個(gè)權(quán)重對(duì)象的值設(shè)置為這個(gè)和。給出一對(duì)位于(i,j)和(a,b)的 節(jié)點(diǎn),它會(huì)設(shè)置在權(quán)重?cái)?shù)組中位于(i*10+j,a*10+b)的權(quán)重對(duì)象的值。
這就是權(quán)重如何構(gòu)造的過(guò)程,不過(guò),它如何作用于更大的 Hopfield 算法?它如何作用于圖案的重構(gòu)?
重構(gòu)
如果在手邊有一個(gè)權(quán)重?cái)?shù)組和一個(gè)失真的或有噪聲的圖案,Hopfield 網(wǎng)絡(luò)有時(shí)可以輸出原始圖案。沒(méi)有保證,但是 網(wǎng)絡(luò)正確次數(shù)的百分比高得驚人。它既可以同步完成,也可以異步完成。
如果是異步完成,網(wǎng)絡(luò)會(huì)遍歷失真的圖案,在每一個(gè)節(jié)點(diǎn) N,它會(huì)詢問(wèn) N 的值應(yīng)該設(shè)置為 -1 還是 +1。
要確定這一設(shè)置,網(wǎng)絡(luò)會(huì)去遍歷權(quán)重?cái)?shù)組中包含 N 與其他節(jié)點(diǎn)間所有權(quán)重的的行。不要忘記,節(jié)點(diǎn)可能是也可能不是自權(quán)重的。
在第二次遍歷的每一步,它會(huì)計(jì)算出(1)N 與另一個(gè)節(jié)點(diǎn)之間的權(quán)重與(2)另一個(gè)節(jié)點(diǎn)的值的乘積。正如您所預(yù)料的,網(wǎng)絡(luò)會(huì) 保持這些乘積的一個(gè)使用中的計(jì)數(shù)器。
現(xiàn)在,網(wǎng)絡(luò)就可以做出判定。至少在當(dāng)前的實(shí)現(xiàn)中,如果這個(gè)和小于 0,網(wǎng)絡(luò)就將節(jié)點(diǎn)設(shè)置為 -1,如果它大于或等于 0,則網(wǎng)絡(luò)將 節(jié)點(diǎn)的值設(shè)置為 +1。
圖 5. 重構(gòu):不遺留任何節(jié)點(diǎn)
清單 3. 重構(gòu)
For every node, N, in pattern P.
SUM = 0
For every node, A, in P:
W = weight between N and A
V = value of A
SUM += W * V
if SUM < 0:
set N's value to -1
else:
set N's value to +1
默認(rèn)的更新是異步的,因?yàn)榫W(wǎng)絡(luò)只是在確定的這個(gè)值應(yīng)該是什么之后才去設(shè)置一個(gè)節(jié)點(diǎn)的值。如果網(wǎng)絡(luò)在做出了所有判定 后再去設(shè)置節(jié)點(diǎn)的值,那么它就可以是同步的。在這種情況下,它將存儲(chǔ)它的判定,然后在最后一個(gè)判定做出后更新數(shù)組的節(jié)點(diǎn)。 在 net.py(參見(jiàn) 參考資料)中,重構(gòu)默認(rèn)情況下異步進(jìn)行的,不過(guò)要注意 同步重構(gòu) 的選項(xiàng)。
當(dāng)您體驗(yàn) net.py,當(dāng)重構(gòu)成功時(shí),Hopfield 網(wǎng)絡(luò)的行為令人震驚。這種行為之一是,甚至當(dāng)權(quán)重?cái)?shù)組嚴(yán)重退化時(shí),它仍可以 重構(gòu)圖案。我的簡(jiǎn)單實(shí)現(xiàn)的退化權(quán)重(Degrade Weights)會(huì)遍歷權(quán)重?cái)?shù)組并隨機(jī)地將權(quán)重設(shè)置為 0。對(duì)權(quán)重?cái)?shù)級(jí)的顯示給出了 破壞程度的一個(gè)視圖。在這里,正確的重構(gòu)說(shuō)明 Hopfield 網(wǎng)絡(luò)的容錯(cuò)性遠(yuǎn)超過(guò)大腦。它是如何工作的?數(shù)學(xué)的描述不會(huì)短。取而 代之的,這里給出了一個(gè)結(jié)構(gòu)簡(jiǎn)介。
發(fā)生了什么
Hopfield 網(wǎng)絡(luò)的算法細(xì)節(jié)說(shuō)明了為什么它有時(shí)可以消除噪聲。和通常算法分析一樣,最麻煩的部分是數(shù)學(xué)細(xì)節(jié)。在當(dāng)前的例子中,這些 是難以描繪和想像的。幸運(yùn)的是,有一些密切相關(guān)的現(xiàn)象,可以使 Hopfield 網(wǎng)絡(luò)的工作原理清楚明白地顯示出來(lái)。
當(dāng)一個(gè)彈球掉入一個(gè)簡(jiǎn)單曲面構(gòu)成的碗中時(shí),它會(huì)滾到最低點(diǎn)。碗的曲率就像是一個(gè)規(guī)則,輸入彈球的入口點(diǎn),然后返回最低點(diǎn), 即碗底。更為復(fù)雜的曲率將類(lèi)似于一個(gè)函數(shù),它輸入一個(gè)入口點(diǎn)并返回幾個(gè)局部最低點(diǎn)中的其中之一。
能量是這些簡(jiǎn)單現(xiàn)象的一個(gè)基本部分。不管是在簡(jiǎn)單的還是在復(fù)雜的例子中,進(jìn)入的彈球都具有一定度量的能量。隨時(shí)間的過(guò)去, 這個(gè)能量會(huì)減少。它最終會(huì)達(dá)到一個(gè)穩(wěn)定狀態(tài),不能再變小。在復(fù)雜的例子中,可能會(huì)有一個(gè)更低的能量級(jí)別,但是彈球無(wú)法達(dá)到。
類(lèi)似地,不管有沒(méi)有失真,一個(gè)圖案都可以被認(rèn)為具有特定度量的能量。所以,圖案 p1 到 p5 有能量級(jí)別。
圖案能量級(jí)別
圖案的能量級(jí)別的計(jì)算并不復(fù)雜。Hopfield 網(wǎng)絡(luò)計(jì)算每一個(gè)可能的節(jié)點(diǎn)對(duì)的值與它們之間權(quán)重的乘積。圖案的 能量級(jí)別是用負(fù) 2 去除這些乘積的和所得的結(jié)果。 Net.py 顯示了任意給定圖案或節(jié)點(diǎn) 數(shù)組的能量級(jí)別。當(dāng)您重構(gòu)圖案時(shí),我認(rèn)為并希望您將能夠看到圖案能量級(jí)別的下降。
在重構(gòu)中,網(wǎng)絡(luò)基于其他節(jié)點(diǎn)的值及它們之間的權(quán)重的乘積的和做出翻轉(zhuǎn)一個(gè)節(jié)點(diǎn)的判定。當(dāng)和小于 0 時(shí),節(jié)點(diǎn)設(shè)置為 -1,否則設(shè)置為 +1。當(dāng)值與權(quán)重的乘積是正的時(shí),它有助于促使和大于 0。不過(guò)這樣會(huì)將網(wǎng)絡(luò)推向?qū)⒐?jié)點(diǎn)值設(shè)置為 +1 的趨勢(shì)。當(dāng)乘積是負(fù)的時(shí),和被推進(jìn)到或者小于 0。于是,網(wǎng)絡(luò)被推向到將節(jié)點(diǎn)的設(shè)置為 -1 的趨勢(shì)。權(quán)重的變化 會(huì)引起度量的變化以及網(wǎng)絡(luò)進(jìn)行判定過(guò)程中被推向的趨勢(shì)的變化。圖案可能會(huì)失真很?chē)?yán)重,導(dǎo)致網(wǎng)絡(luò)不會(huì)被推向到做出 正確判定的趨勢(shì)。如果表述沒(méi)有問(wèn)題,網(wǎng)絡(luò)在絕大部分時(shí)候會(huì)被推向正確的趨勢(shì)。
如果您重構(gòu)那五個(gè)圖案中的任意一個(gè),您將發(fā)現(xiàn)每個(gè)圖案會(huì)重構(gòu)到自身。它應(yīng)該是這樣,因?yàn)槊總€(gè)圖案已經(jīng)占據(jù)了一個(gè) 局部最低能量的點(diǎn)。沒(méi)有重構(gòu)過(guò)程可以再降低圖案的能量級(jí)別。如果您成功地重構(gòu)了一個(gè)失真的圖案,Hopfield 就已經(jīng)將 圖案的能量級(jí)別降到了某個(gè)圖案的級(jí)別。當(dāng)失敗時(shí),它是已經(jīng)將失真圖案的能量級(jí)別降到了一個(gè)假的局部低點(diǎn)。在兩種情況下, 能量級(jí)別都不能再有任何降低。換句話說(shuō),它已經(jīng)達(dá)到了一種穩(wěn)定狀態(tài)。以能量的方式來(lái)描述 Hopfield 網(wǎng)絡(luò)有著有趣而且 重要的意義。在此基礎(chǔ)之上,它可以以數(shù)學(xué)的方式建立起來(lái),以使得重復(fù)應(yīng)用重構(gòu)算法可以最終得到一個(gè)穩(wěn)定的圖案。(參閱 參考資料以獲得詳細(xì)資料。)
結(jié)束語(yǔ)
您應(yīng)該意識(shí)到 Hopfield 網(wǎng)絡(luò)的局限性。一個(gè)經(jīng)常被提及的明顯局限是,它的圖案必須可以被編碼為一個(gè)數(shù)組,這個(gè)數(shù)組或者由 -1 和 +1 構(gòu)成,或者由 0 和 +1 構(gòu)成。您已經(jīng)知道,Hopfield 可能會(huì)穩(wěn)定于一個(gè)假的局部低點(diǎn)。這個(gè)更為明顯的局限在于,當(dāng)圖案 的數(shù)目超過(guò)節(jié)點(diǎn)數(shù)組中的節(jié)點(diǎn)數(shù)目的大約 14% 時(shí),網(wǎng)絡(luò)穩(wěn)定于某個(gè)假的局部低點(diǎn)的概率會(huì)增加。也就是說(shuō),每增加一個(gè)基本圖案, 就必須多大約 7 個(gè)節(jié)點(diǎn)。盡管有這樣的局限性,但是,這里所討論的圖案重構(gòu)還是有可能成為解決您特定計(jì)算問(wèn)題的直觀向?qū)А?現(xiàn)在您已經(jīng)大概了解了最初提及的 Hopfield 算法。如果它能滿足您的需要,現(xiàn)在您已經(jīng)明白了構(gòu)建您自己的實(shí)現(xiàn)的上部構(gòu)造。 這包括計(jì)算權(quán)重?cái)?shù)組的算法、重構(gòu)失真圖案的方式以及計(jì)算圖案的能量級(jí)別的算法。
相關(guān)文章
詳解【python】str與json類(lèi)型轉(zhuǎn)換
這篇文章主要介紹了【python】str與json類(lèi)型轉(zhuǎn)換,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04Python configparser模塊應(yīng)用過(guò)程解析
這篇文章主要介紹了Python configparser模塊應(yīng)用過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08Python新手如何進(jìn)行閉包時(shí)綁定變量操作
在本篇文章里小編給大家分享的是關(guān)于Python新閉包時(shí)綁定變量實(shí)例,有興趣的朋友們可以參考下。2020-05-05Python利用Selenium實(shí)現(xiàn)自動(dòng)觀看學(xué)習(xí)通視頻
Selenium是一個(gè)用于Web應(yīng)用程序測(cè)試的工具。Selenium測(cè)試直接運(yùn)行在瀏覽器中,就像真正的用戶在操作一樣。本文主要介紹了利用Selenium實(shí)現(xiàn)自動(dòng)觀看學(xué)習(xí)通視頻,需要的同學(xué)可以參考一下2021-12-12一篇文章帶你搞懂Python類(lèi)的相關(guān)知識(shí)
今天我們要說(shuō)的是面向?qū)ο蟮暮诵?----類(lèi),類(lèi)能幫我們把復(fù)雜的事情變得有條理,有順序,希望大家通過(guò)學(xué)習(xí)類(lèi)能改善自己的編碼風(fēng)格,使代碼變得更為好看,更加通俗易懂,需要的朋友可以參考下2021-05-05python實(shí)現(xiàn)定時(shí)任務(wù)的八種方式總結(jié)
在日常工作中,我們常常會(huì)用到需要周期性執(zhí)行的任務(wù),下面這篇文章主要給大家介紹了關(guān)于python實(shí)現(xiàn)定時(shí)任務(wù)的八種方式,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01關(guān)于Python 常用獲取元素 Driver 總結(jié)
今天小編就為大家分享一篇關(guān)于Python 常用獲取元素 Driver 總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11詳解PyTorch手寫(xiě)數(shù)字識(shí)別(MNIST數(shù)據(jù)集)
這篇文章主要介紹了詳解PyTorch手寫(xiě)數(shù)字識(shí)別(MNIST數(shù)據(jù)集),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08Python爬蟲(chóng)中urllib庫(kù)的進(jìn)階學(xué)習(xí)
本篇文章主要介紹了Python爬蟲(chóng)中urllib庫(kù)的進(jìn)階學(xué)習(xí)內(nèi)容,對(duì)此有興趣的朋友趕緊學(xué)習(xí)分享下。2018-01-01