準(zhǔn)備工作:1. 安裝jupyter notebook, 教程:http:///article/getting-started-with-jupyter-notebook-part-1/ 2. 一臺(tái)配置高點(diǎn)的電腦,這個(gè)還是有必要投入一些的,不然每次做練習(xí)都要等上很長(zhǎng)時(shí)間,我在公司的電腦大概做完這個(gè)訓(xùn)練要10秒左右,回家后的電腦要130秒左右。這還是一次訓(xùn)練的時(shí)間,后面做優(yōu)化還需要訓(xùn)練超參數(shù)與多種模型對(duì)比,總不能每次都多等待10幾倍的時(shí)間吧,程序員最忍受不了的就是無(wú)效的等待時(shí)間。 之前看機(jī)器學(xué)習(xí)界女神級(jí)的人物李飛飛的課程,里面專門(mén)介紹她用的電腦,可見(jiàn)牛人對(duì)電腦的要求是非常高的,下面看一張電腦配置的圖片: CPU: intel core i7-7700k 4.4G 內(nèi)存:4X8G 顯示卡: 兩個(gè)NV GTX 1070 硬盤(pán): HDD一個(gè), SSD兩個(gè) 這里多嘮兩句嗑兒,在技術(shù)裝備上千萬(wàn)不要舍不得花錢(qián),用2萬(wàn)多的電腦去學(xué)習(xí)心態(tài)都不一樣,心里會(huì)想“這么貴的電腦,要多用幾次啊,不能閑置在那兒浪費(fèi)了,多做練習(xí),多碼代碼”,多練習(xí)恰恰就是你是否能學(xué)習(xí)成功的關(guān)鍵,要用任務(wù)去驅(qū)動(dòng)自己,積極主動(dòng)的去學(xué)習(xí)。要記住一點(diǎn),現(xiàn)在花的錢(qián)以后都會(huì)十倍,百倍的掙回來(lái)。 (當(dāng)然我不是推銷(xiāo)賣(mài)電腦的,只是傳達(dá)一種理念) 引用:我們要用到的是Michael Nielsen的例子,github地址:https://github.com/mnielsen/neural-networks-and-deep-learning 采用的數(shù)據(jù)集就是著名的“MNIST數(shù)據(jù)集”。它的收集者之一是人工智能領(lǐng)域著名的科學(xué)家——Yann LeCu。這個(gè)數(shù)據(jù)集有60000個(gè)訓(xùn)練樣本數(shù)據(jù)集和10000個(gè)測(cè)試用例。運(yùn)用本文展示的單隱層神經(jīng)網(wǎng)絡(luò),就可以達(dá)到96%的正確率。 舉例:首先回顧一下機(jī)器學(xué)習(xí)的過(guò)程:
用一張圖片來(lái)表示 其中生成模型這一步非常重要,它并不是一下就生成好了,是調(diào)整神經(jīng)網(wǎng)絡(luò)的權(quán)重和偏移,取訓(xùn)練中誤差非常低的那個(gè),這里就聯(lián)系到之前講的“最小二乘法”的相關(guān)概念。 注意訓(xùn)練集的數(shù)據(jù)會(huì)反復(fù)用,但是測(cè)試集的數(shù)據(jù)只會(huì)執(zhí)行一次。可能會(huì)生成多個(gè)模型誤差都很小,這時(shí)候就用測(cè)試集來(lái)比較,挑選出測(cè)試集誤差最小的模型。 代碼:不要緊張老鐵,代碼總共5行,還是算上兩行import的代碼的情況下。 import mnist_loader import network training_data, validation_data, test_data = mnist_loader.load_data_wrapper() net = network.Network([784, 30, 10]) net.SGD(training_data, 30, 10, 3.0, test_data=test_data) 解釋一下:
什么是超參數(shù)呢?超參數(shù)是影響所求參數(shù)最終取值的參數(shù),是機(jī)器學(xué)習(xí)模型里面的框架參數(shù),可以理解成參數(shù)的參數(shù),它們通常是手工設(shè)定,不斷試錯(cuò)調(diào)整的,或者對(duì)一系列窮舉出來(lái)的參數(shù)組合一通進(jìn)行枚舉(網(wǎng)格搜索)來(lái)確定。 打開(kāi)jupyter notebook進(jìn)入到下載的github代碼文件夾,再進(jìn)入src的文件夾,創(chuàng)建一個(gè)空白的python2.7的notebook,把代碼一個(gè)字一個(gè)字的打進(jìn)去,打的時(shí)候想想上面的注釋內(nèi)容,千萬(wàn)別粘貼,丟面兒,就5行代碼而已。打完后直接運(yùn)行就可以看到輸出結(jié)果,下面是我剛打的,熱乎乎: 啟發(fā)式理解這個(gè)我還是聽(tīng)寒老師講的,我覺(jué)得非常形象很容易理解,先看一張圖片:
如果這四個(gè)節(jié)點(diǎn)的值都很高,說(shuō)明這四個(gè)區(qū)域同時(shí)滿足這些特征。將以上的四個(gè)部分拼接起來(lái),我們會(huì)發(fā)現(xiàn),輸入樣本很可能就是一個(gè)手寫(xiě)“0”! 因此,同一層的幾個(gè)神經(jīng)元同時(shí)被激活了意味著輸入樣本很可能是某個(gè)數(shù)字。 當(dāng)然,這只是對(duì)神經(jīng)網(wǎng)絡(luò)作用機(jī)制的一個(gè)啟發(fā)式理解。真實(shí)的過(guò)程卻并不一定是這樣。但通過(guò)啟發(fā)式理解,我們可以對(duì)神經(jīng)網(wǎng)絡(luò)作用機(jī)制有一個(gè)更加直觀的認(rèn)識(shí)。 總結(jié):通過(guò)今天的5行代碼,可以算是自己在機(jī)器學(xué)習(xí)界的 “Hello world”。重點(diǎn)是理解機(jī)器學(xué)習(xí)的工作流程,以及神經(jīng)網(wǎng)絡(luò)作用機(jī)制。 |
|
來(lái)自: 萬(wàn)皇之皇 > 《IT互聯(lián)》