神經(jīng)網(wǎng)絡(luò)--基礎(chǔ)篇(二)解析:零基礎(chǔ)入門深度學(xué)習(xí)(3) - 神經(jīng)網(wǎng)絡(luò)和反向傳播算法Part2

參考的文章《零基礎(chǔ)入門深度學(xué)習(xí)(3) - 神經(jīng)網(wǎng)絡(luò)和反向傳播算法》:https://www.zybuluo.com/hanbingtao/note/476663


接上一篇,參考文章里面這一部分作者太不負(fù)責(zé)任了椿疗。锥咸。。代碼沒寫全就跑路了。。這一部分分為兩塊:傳統(tǒng)方法代碼,向量化方法代碼芬骄。


傳統(tǒng)方法篇

先介紹傳統(tǒng)方法。再次吐槽鹦聪,作者給的讀取圖像的代碼账阻,太不合時宜了,Python2.7簡直了椎麦,我用Python3.6怎么跑也跑不通宰僧,后來發(fā)現(xiàn)了這個,(可能適用于Py3.5)

這篇文章作者也是用Python3(3.5)在跑原代碼也遇到了問題观挎,他自己解決了琴儿,我本以為看到了一線生機(jī),激動得我不要不要的嘁捷,誰成想3.6和3.5也是難以逾越的鴻溝造成。。雄嚣。我又一次陷入了無奈中晒屎,最后我忽然想到了git?hub,果不其然缓升,找到了另一種讀取mnist數(shù)據(jù)集的方法鼓鲁。。港谊。github萬歲:Э浴!歧寺!放鏈接燥狰!

github:https://github.com/sivapvarma/MNIST.py/blob/master/mnist.py

我copy了代碼做了些許修改和標(biāo)注:

github:https://github.com/leiseraiesecqd/DL/blob/master/read.py


然后就是要分析一下mnist數(shù)據(jù)集到底長啥樣:

train_data_set,

train_labels


test_data_set,


test_labels


數(shù)據(jù)類型全部是:

我們讀取train_set中的一張棘脐,探索其結(jié)構(gòu)(只是截取了部分截圖):是一個28*28的結(jié)構(gòu),也就是一個大[? ]里有28個小[? ]龙致,每個小[? ]里面有28個元素蛀缝。train_set有60000個這樣的大[? ]。

我們讀取train_label中前五個元素:可見是個1*60000的結(jié)構(gòu)目代,也就是一個[? ]里有60000個元素組成屈梁。


目前,對于dataset和label我們沒動像啼。接下來俘闯,要reshap了潭苞,這是一門學(xué)問:龆场!此疹!務(wù)必要自己學(xué)會探索僧诚。先說一下為啥要reshape,因?yàn)槲覀兊木W(wǎng)絡(luò)結(jié)構(gòu)定義為輸入層784個節(jié)點(diǎn)蝗碎,輸出層10個節(jié)點(diǎn)湖笨。

(1)dataset的處理

將每張圖片展成1*728的向量。train_data_set[0].reshape(1,784)蹦骑,取一張照片然后可以看到(截取了部分)如下圖:也就是一個大[? ]里面有一個小[ ]慈省,這個小[ ]里有784個元素。下一個問題眠菇,對整個dataset怎么處理边败?用 train_data_set.reshape(60000,784),結(jié)構(gòu)變成了一個大[? ]里面有60000個小[ ]捎废,每個小[ ]有784的元素笑窜。整個數(shù)據(jù)集shape是(60000,784).

(2)label的處理

接下來,我們需要對labe做兩步處理登疗。

第一排截、進(jìn)行one-hot encoding,也就是那個norm函數(shù)辐益,是每個元素表示成断傲,如[0,1,0,0,0,0,0,0,0,0,0]的結(jié)構(gòu),十個元素對應(yīng)輸出層的10個節(jié)點(diǎn)智政,這樣子我們再取train_label的前五個元素认罩,就變成如圖。一個大[ ]里有60000個小[? ]女仰,每個小[? ]里面有10個有元素猜年。此時對于整個數(shù)據(jù)集抡锈,它的shape是(60000,10)

第二、reshape變形乔外。我們?nèi)nehot處理后的數(shù)據(jù)的第一個數(shù)據(jù)床三。train_labels[0].reshap(10,1),如圖:[? ]中每個元素都加了[? ] .這種數(shù)據(jù)才是我們需要的杨幼。而不是上圖那種撇簿,因?yàn)樯婕暗矫總€元素要和對應(yīng)的每個輸出節(jié)點(diǎn)的值相減。那么如何reshape全部呢差购?答案不是train_labels.reshap(10,60000)四瘫,而是train_labels.reshape(60000,10,1). 顯然,此時整個數(shù)據(jù)集shape是(60000,10,1)欲逃。


休息一下找蜜,讓我們總結(jié)一下(10,)和(10,1)的區(qū)別:

前者:[ 1,2,3,4,5]

后者:[[1],[2],[3],[4],[5]]

小結(jié):對于深度學(xué)習(xí)框架稳析,tensorflow洗做。我們經(jīng)常調(diào)侃,每個tensor都在flow彰居。其實(shí)對于數(shù)據(jù)結(jié)構(gòu)的理解相當(dāng)重要诚纸,數(shù)據(jù)在網(wǎng)絡(luò)里面是怎么跑的,這個理解是很重要的陈惰。拿本例子來說畦徘,輸入train_set是一個60000*784的結(jié)構(gòu),每次輸入抬闯,都輸入一張照片井辆,即一個元素,這個元素里有784個數(shù)據(jù)画髓,對應(yīng)輸入層784個節(jié)點(diǎn)掘剪;對應(yīng)的,trian_label是一個60000*10*1的結(jié)構(gòu)奈虾,每次輸入一個元素夺谁,這個元素里有10個數(shù)據(jù),對應(yīng)輸出層10個節(jié)點(diǎn)肉微。歸納起來匾鸥,系統(tǒng)是一個一個樣本的跑,一個樣本包括一張照片和它對應(yīng)的label碉纳。test的樣本同理勿负。


關(guān)于數(shù)據(jù)集我們就講這么多。下面就是另一個坑劳曹。關(guān)于我們之前寫好的那個network奴愉,他其實(shí)是跑不通的琅摩。。锭硼。作者太不負(fù)責(zé)任了房资。主要問題是networ.predict它返回的是一個map,這樣會和我們mnisy.py里面evaluate函數(shù)代碼不匹配檀头,所以我做了修改network2.0.py轰异,主要是把predict函數(shù)返回做了修改,使它返回預(yù)測值暑始,而不是一個map搭独。而中間過程真的是特別心塞,說到底廊镜,就是我對之前的作者寫的network知識照葫蘆畫瓢牙肝,沒有真正理解他每一步是怎么跑的。具體結(jié)構(gòu)解析在我的上一篇文章里有期升。http://www.reibang.com/writer#/notebooks/17670616/notes/18346188


再嘮叨一句惊奇,迭代次數(shù)和訓(xùn)練的樣本數(shù)不是一個東西,迭代一次播赁,會把你輸入的樣本數(shù)跑完。而不是迭代一次吼渡,跑一個樣本容为。比如:我輸入20個樣本,迭代一次寺酪,那么我就把這20樣本跑完了坎背,這樣算一完成一次迭代。還有寄雀,迭代次數(shù)設(shè)置是在訓(xùn)練的時候得滤,測試時不用迭代,因?yàn)榫团芤槐榈贸鰷?zhǔn)確率盒犹。


最后附一下我的代碼(基于Py3.6)https://github.com/leiseraiesecqd/DL懂更,

本節(jié)內(nèi)容參考里面的read+network2.0.py+mnist.py

提示一下,由于cpu實(shí)在是弱雞急膀,建議大家跑程序的時候先訓(xùn)練一個樣本沮协,測試一個樣本;如果能跑通卓嫂,再訓(xùn)練10張慷暂,測試10張。這樣就差不多了晨雳,重在理解行瑞。奸腺。如果你妄想把60000個訓(xùn)練集訓(xùn)練完,把10000個測試集測試完血久。那就等到幾年后吧洋机。。洋魂。

ps:下一節(jié)我們講向量化編程绷旗。會使效率提升很多。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末副砍,一起剝皮案震驚了整個濱河市衔肢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌豁翎,老刑警劉巖角骤,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異心剥,居然都是意外死亡邦尊,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門优烧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蝉揍,“玉大人,你說我怎么就攤上這事畦娄∮终矗” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵熙卡,是天一觀的道長杖刷。 經(jīng)常有香客問我,道長驳癌,這世上最難降的妖魔是什么滑燃? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮颓鲜,結(jié)果婚禮上表窘,老公的妹妹穿的比我還像新娘。我一直安慰自己灾杰,他們只是感情好蚊丐,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著艳吠,像睡著了一般麦备。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天凛篙,我揣著相機(jī)與錄音黍匾,去河邊找鬼。 笑死呛梆,一個胖子當(dāng)著我的面吹牛锐涯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播填物,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼纹腌,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了滞磺?” 一聲冷哼從身側(cè)響起升薯,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎击困,沒想到半個月后涎劈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡阅茶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年蛛枚,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脸哀。...
    茶點(diǎn)故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡蹦浦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出企蹭,到底是詐尸還是另有隱情白筹,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布谅摄,位于F島的核電站,受9級特大地震影響系馆,放射性物質(zhì)發(fā)生泄漏送漠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一由蘑、第九天 我趴在偏房一處隱蔽的房頂上張望闽寡。 院中可真熱鬧,春花似錦尼酿、人聲如沸爷狈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涎永。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間羡微,已是汗流浹背谷饿。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留妈倔,地道東北人博投。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像盯蝴,于是被迫代替她去往敵國和親毅哗。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容