這篇文章將為大家詳細(xì)講解有關(guān)如何用Python代碼搭建神經(jīng)網(wǎng)絡(luò)來掌握一些基本概念,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對相關(guān)知識(shí)有一定的了解。
創(chuàng)新互聯(lián)是一家專注于做網(wǎng)站、成都網(wǎng)站制作與策劃設(shè)計(jì),柘城網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:柘城等地區(qū)。柘城做網(wǎng)站價(jià)格咨詢:18980820575
這里的“用Python”指的就是不用那些現(xiàn)成的神經(jīng)網(wǎng)絡(luò)庫比如Keras、Tensorflow等,否則連9行都不用了。
本文我會(huì)解釋這個(gè)神經(jīng)網(wǎng)絡(luò)是怎樣煉成的,所以你也可以搭建你自己的神經(jīng)網(wǎng)絡(luò)。也會(huì)提供一個(gè)加長版、但是也更漂亮的源代碼。
不過首先,什么是神經(jīng)網(wǎng)絡(luò)?人腦總共有超過千億個(gè)神經(jīng)元細(xì)胞,通過神經(jīng)突觸相互連接。如果一個(gè)神經(jīng)元被足夠強(qiáng)的輸入所激活,那么它也會(huì)激活其他神經(jīng)元,這個(gè)過程就叫“思考”。
我們可以在計(jì)算機(jī)上創(chuàng)建神經(jīng)網(wǎng)絡(luò),來對這個(gè)過程進(jìn)行建模,且并不需要模擬分子級的生物復(fù)雜性,只要觀其大略即可。為了簡化起見,我們只模擬一個(gè)神經(jīng)元,含有三個(gè)輸入和一個(gè)輸出。
我們將訓(xùn)練這個(gè)神經(jīng)元來解決下面這個(gè)問題,前四個(gè)樣本叫作“訓(xùn)練集”,你能求解出模式嗎??
處應(yīng)該是0
還是1
呢?
或許已經(jīng)發(fā)現(xiàn)了,輸出總是與第一列的輸入相等,所以?
應(yīng)該是1
。
問題雖然很簡單,但是如何教會(huì)神經(jīng)元來正確的回答這個(gè)問題呢?我們要給每個(gè)輸入賦予一個(gè)權(quán)重,權(quán)重可能為正也可能為負(fù)。權(quán)重的絕對值,代表了輸入對輸出的決定權(quán)。在開始之前,我們先把權(quán)重設(shè)為隨機(jī)數(shù),再開始訓(xùn)練過程:
從訓(xùn)練集樣本讀取輸入,根據(jù)權(quán)重進(jìn)行調(diào)整,再代入某個(gè)特殊的方程計(jì)算神經(jīng)元的輸出。
計(jì)算誤差,也就是神經(jīng)元的實(shí)際輸出和訓(xùn)練樣本的期望輸出之差。
根據(jù)誤差的方向,微調(diào)權(quán)重。
重復(fù)10000次。
最終神經(jīng)元的權(quán)重會(huì)達(dá)到訓(xùn)練集的最優(yōu)值。如果我們讓神經(jīng)元去思考一個(gè)新的形勢,遵循相同過程,應(yīng)該會(huì)得到一個(gè)不錯(cuò)的預(yù)測。
你可能會(huì)好奇,計(jì)算神經(jīng)元輸出的人“特殊方程”是什么?首先我們?nèi)∩窠?jīng)元輸入的加權(quán)總和:
為什么是這個(gè)方程?首先我們希望調(diào)整量與誤差量成正比,然后再乘以輸入(0-1)。如果輸入為0,那么權(quán)重就不會(huì)被調(diào)整。最后乘以Sigmoid曲線的梯度,為便于理解,請考慮:
我們使用Sigmoid曲線計(jì)算神經(jīng)元輸出。
如果輸出絕對值很大,這就表示該神經(jīng)元是很確定的(有正反兩種可能)。
Sigmoid曲線在絕對值較大處的梯度較小。
如果神經(jīng)元確信當(dāng)前權(quán)重值是正確的,那么就不需要太大調(diào)整。乘以Sigmoid曲線的梯度可以實(shí)現(xiàn)。
實(shí)際上也有其他讓神經(jīng)元學(xué)習(xí)更快的方程,這里主要是取其相對簡單的優(yōu)勢。
盡管我們不直接用神經(jīng)網(wǎng)絡(luò)庫,但還是要從Python數(shù)學(xué)庫Numpy中導(dǎo)入4種方法:
exp: 自然對常數(shù)
array: 創(chuàng)建矩陣
dot:矩陣乘法
random: 隨機(jī)數(shù)
比如我們用array()
方法代表訓(xùn)練集:
.T
函數(shù)就是矩陣轉(zhuǎn)置。我想現(xiàn)在可以來看看美化版的源代碼了,最后我還會(huì)提出自己的終極思考。源代碼中已經(jīng)添加了注釋逐行解釋。注意每次迭代我們都一并處理了整個(gè)訓(xùn)練集,以下為完整的Python示例:
(Kaiser:講的是將代碼寫入本地main.py
文件,再在終端中運(yùn)行python main.py
,這里只需點(diǎn)擊運(yùn)行即可。)
我們用Python打造了一個(gè)簡單的神經(jīng)網(wǎng)絡(luò)。
首先神經(jīng)網(wǎng)絡(luò)給自己賦予隨機(jī)的權(quán)重值,然后用訓(xùn)練集訓(xùn)練自己,最后去思考新的形勢[1 0 0]
并預(yù)測了0.99993704
,這與正確答案非常接近。
傳統(tǒng)的計(jì)算機(jī)程序無法學(xué)習(xí),神經(jīng)網(wǎng)絡(luò)的最大魅力就在于學(xué)習(xí)能力,可以自主適應(yīng)新形勢,就像人的心智一樣。當(dāng)然,僅僅一個(gè)神經(jīng)元只能完成特別簡單的任務(wù),但如果我們把上百萬個(gè)如此的神經(jīng)元連接起來呢?能否有朝一日制造出具有自我意識(shí)的東西?
關(guān)于如何用Python代碼搭建神經(jīng)網(wǎng)絡(luò)來掌握一些基本概念就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
網(wǎng)站名稱:如何用Python代碼搭建神經(jīng)網(wǎng)絡(luò)來掌握一些基本概念
鏈接分享:http://www.rwnh.cn/article24/jgpjje.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、面包屑導(dǎo)航、App開發(fā)、外貿(mào)網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化、網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)