官术网_书友最值得收藏!

2.1 盤(pán)古人工智能框架

盤(pán)古人工智能框架實(shí)現(xiàn)了多層次神經(jīng)網(wǎng)絡(luò),這里神經(jīng)網(wǎng)絡(luò)是指它的架構(gòu),如圖2-1所示,分為神經(jīng)網(wǎng)絡(luò)的輸入層、隱藏層和輸出層,相當(dāng)于一個(gè)程序的輸入、中間的處理和輸出過(guò)程。

圖2-1 神經(jīng)網(wǎng)絡(luò)骨架

左側(cè)是數(shù)據(jù)的輸入,最右側(cè)是數(shù)據(jù)的輸出,中間是處理的過(guò)程,有線條連接輸入層、隱藏層、輸出層,這就是TensorFlow數(shù)據(jù)處理的過(guò)程。這種處理的思路和用Java語(yǔ)言寫(xiě)一個(gè)“Hello World”的程序是類似的,即使用一個(gè)main入口,接著是一行打印“Hello World”語(yǔ)句,在代碼編寫(xiě)上沒(méi)有任何區(qū)別,只不過(guò)神經(jīng)網(wǎng)絡(luò)把數(shù)據(jù)處理代碼分成幾個(gè)步驟,而且這幾個(gè)步驟是循環(huán)迭代的。首先是數(shù)據(jù)輸入,這是第一步,任何一個(gè)程序都有數(shù)據(jù)輸入的過(guò)程;第二步進(jìn)行初步的處理;第三步進(jìn)一步的處理,然后得出一個(gè)中間結(jié)果(注意是中間結(jié)果),然后開(kāi)始循環(huán)遍歷中間處理的過(guò)程,每一次都會(huì)對(duì)上一次的處理進(jìn)行一點(diǎn)改進(jìn)。重復(fù)的次數(shù)越多,理論上效果就越好。在TensorFlow網(wǎng)站運(yùn)行一下,可視化運(yùn)行圖右側(cè)是輸出的效果,代表訓(xùn)練的誤差和測(cè)試的誤差,可以看到有值的變化,多次運(yùn)行后會(huì)達(dá)到值變化不太明顯的狀態(tài)。網(wǎng)頁(yè)左上方有個(gè)時(shí)代(Epoch)項(xiàng),時(shí)代是指所有的數(shù)據(jù)都處理了一遍,一遍就是一次時(shí)代,不斷重復(fù)數(shù)據(jù)的處理過(guò)程,以最大化減少誤差。誤差越來(lái)越小,最后變化基本停止了,基本停止或者變化非常緩慢的時(shí)候,可以停止訓(xùn)練,進(jìn)行優(yōu)化。數(shù)據(jù)有流動(dòng),通過(guò)前向傳播算法從左側(cè)流動(dòng)到右側(cè),然后通過(guò)反向傳播算法從右側(cè)流動(dòng)到左側(cè),不斷地循環(huán)迭代,關(guān)鍵在于每個(gè)步驟處理完以后,下一步重復(fù)這個(gè)步驟的時(shí)候能改進(jìn)上一個(gè)步驟的表現(xiàn),這是人工智能的核心,也是和傳統(tǒng)編程不同的地方。

要想實(shí)現(xiàn)圖1-1所示從左到右的功能,其中又有循環(huán),首先要有一個(gè)結(jié)構(gòu)體或者對(duì)象去實(shí)現(xiàn)循環(huán)。這里所謂的結(jié)構(gòu)體或者對(duì)象就是輸入層、隱藏層、輸出層,這個(gè)過(guò)程和人類學(xué)習(xí)的過(guò)程一樣。人類的感知系統(tǒng)如圖2-2所示,人有各種感知系統(tǒng),類似于人工智能的數(shù)據(jù)輸入,人所感知的疼痛就類似于人工智能的激活函數(shù),這將得出一個(gè)結(jié)果供下一步去處理。人工智能的認(rèn)知過(guò)程和人的認(rèn)知過(guò)程是一樣的。

圖2-2 人類的感知系統(tǒng)與人工智能的認(rèn)知系統(tǒng)

如圖2-3所示,神經(jīng)元對(duì)外界感知并做出決定,很多時(shí)候需考慮不同的因素,并且不同因素的重要性優(yōu)先級(jí)不同。權(quán)衡的因素從神經(jīng)網(wǎng)絡(luò)的角度講是特征(Features),從數(shù)學(xué)的角度講是維度(Dimension)。例如,預(yù)測(cè)一下讀者會(huì)不會(huì)喜歡這本書(shū)。書(shū)有很多特征:出版的時(shí)間、價(jià)格、作者、出版社等,這些都是權(quán)衡的因素特征。CNN、RNN之所以強(qiáng)大,就在于其可以自動(dòng)提取特征,而對(duì)于普通的機(jī)器學(xué)習(xí)來(lái)講提取特征則是一個(gè)非常麻煩的過(guò)程。

圖2-3 神經(jīng)元

如圖2-4所示,不同的特征有不同的權(quán)重,如x1x2x3x4x5等權(quán)重。例如,是否需要深厚的數(shù)學(xué)基礎(chǔ)及編程語(yǔ)言基礎(chǔ)是學(xué)習(xí)人工智能課程的一個(gè)權(quán)重,如果你選擇如需要這些基礎(chǔ)就放棄,說(shuō)明這個(gè)權(quán)重對(duì)你影響很大,所以權(quán)重系數(shù)就很大,可能為0.9或者0.85;另一個(gè)因素是上課時(shí)間,如果上課時(shí)間無(wú)所謂,它的權(quán)重可能就為0.1;課程中是否有足夠的項(xiàng)目案例,這個(gè)特別重要,它的權(quán)重可能就是0.99。構(gòu)建一個(gè)神經(jīng)網(wǎng)絡(luò)有幾個(gè)點(diǎn):輸入層、輸出層、中間的隱藏層,前面的層對(duì)于后面的層次都有特征及權(quán)重的影響。

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

不同的權(quán)重可能還會(huì)加一個(gè)偏愛(ài)因子(Bias),例如,項(xiàng)目案例非常重要,則在項(xiàng)目案例權(quán)重0.99的基礎(chǔ)上,可能會(huì)加一個(gè)偏愛(ài)因子。偏愛(ài)因子是額外的一個(gè)權(quán)重。

圖2-5所示是阿爾法狗的訓(xùn)練過(guò)程,圍棋專家給出落子位置數(shù)據(jù),阿爾法狗通過(guò)監(jiān)督學(xué)習(xí)的算法進(jìn)行了一定程度的學(xué)習(xí),也就是神經(jīng)網(wǎng)絡(luò)的深度學(xué)習(xí);學(xué)到一定程度以后再進(jìn)行增強(qiáng)學(xué)習(xí)。

圖2-5 阿爾法狗的訓(xùn)練過(guò)程

接下來(lái)進(jìn)行盤(pán)古人工智能框架代碼實(shí)戰(zhàn)。

首先,我們看一下盤(pán)古人工智能框架版本的整體迭代結(jié)構(gòu)圖。整個(gè)盤(pán)古人工智能框架從第一個(gè)版本迭代到第五個(gè)版本,迭代版本分別為chapter2_Create_AI_Framework、chapter3_Create_AI_Framework、chapter4_Create_AI_Framework、chapter5_Create_AI_Framework、chapter6_Create_AI_Framework。最終的版本chapter6_Create_AI_Framework包括入口主程序Neuron_Network_Entry.py;service目錄里面包括BackPropagation.py、FeatureNormalization.py、ForwardPropagation.py、LossComputation.py、NetworkConnection.py、NetworkStructure.py等模塊;entity目錄里面包括Node.py、Weight.py等Python模塊,如圖2-6所示。

圖2-6 盤(pán)古人工智能框架整體迭代版本

本節(jié)將實(shí)現(xiàn)盤(pán)古人工智能框架的神經(jīng)元網(wǎng)絡(luò)骨架,要實(shí)現(xiàn)的目錄結(jié)構(gòu)如圖2-7所示。

圖2-7 chapter2_Create_AI_Framework目錄結(jié)構(gòu)

讀者可以自行安裝Anaconda的開(kāi)發(fā)環(huán)境(https://www.anaconda.com/download/)。進(jìn)入Anaconda的控制臺(tái),啟動(dòng)Spyder,Anaconda Spyder是一個(gè)機(jī)器學(xué)習(xí)的集成開(kāi)發(fā)環(huán)境,如圖2-8所示。

進(jìn)入Spyder的File explorer窗口,創(chuàng)建自定義的神經(jīng)網(wǎng)絡(luò)項(xiàng)目目錄chapter2_Create_AI_Framework,如圖2-9所示。

選擇chapter2_Create_AI_Framework目錄,單擊齒輪圖標(biāo),然后單擊Set console working directory命令,設(shè)置其為工作目錄,如圖2-10所示。這一步很重要,因?yàn)楹罄m(xù)的所有代碼都將放在這個(gè)目錄中,該工作目錄包括了上下文信息。

圖2-8 Anaconda的控制臺(tái)

圖2-9 創(chuàng)建目錄

圖2-10 設(shè)置工作目錄

實(shí)現(xiàn)盤(pán)古人工智能框架的多層次神經(jīng)網(wǎng)絡(luò),需要以下四個(gè)步驟:

(1)實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)的節(jié)點(diǎn)結(jié)構(gòu)。

(2)實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)層之間節(jié)點(diǎn)的連接。

(3)初始化神經(jīng)網(wǎng)絡(luò)的權(quán)重。

(4)實(shí)現(xiàn)多個(gè)隱藏層。

我們要實(shí)現(xiàn)的人工智能框架和TensorFlow的類似,可以調(diào)整神經(jīng)元的數(shù)量。第1步我們要實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)的節(jié)點(diǎn)結(jié)構(gòu)。從Java開(kāi)發(fā)者的角度講,節(jié)點(diǎn)結(jié)構(gòu)就是JavaBean。

我們先在chapter2_Create_AI_Framework工作目錄中建立一個(gè)子目錄entity,entity的含義是實(shí)體,如圖2-11所示。

圖2-11 創(chuàng)建entity子目錄

在entity子目錄下創(chuàng)建一個(gè)節(jié)點(diǎn)文件Node.py,如圖2-12所示。

圖2-12 創(chuàng)建Node.py文件

接下來(lái)通過(guò)代碼來(lái)實(shí)現(xiàn)多層次神經(jīng)網(wǎng)絡(luò)功能。

主站蜘蛛池模板: 冷水江市| 突泉县| 麟游县| 昭通市| 淮阳县| 水富县| 余江县| 烟台市| 五家渠市| 微博| 茂名市| 兴宁市| 武义县| 来安县| 丰宁| 大渡口区| 招远市| 特克斯县| 新营市| 昭通市| 昔阳县| 巩留县| 临沭县| 博罗县| 尚义县| 许昌市| 临桂县| 霍林郭勒市| 托克托县| 电白县| 富平县| 阿勒泰市| 松原市| 招远市| 博兴县| 池州市| 贺州市| 花莲市| 马山县| 玉树县| 康保县|