第254章 數據解析和FCN的拓撲結構

隨後,江寒操作着電腦,心無旁騖,很快就進入了狀態。

夏雨菲也不再來打擾他,拿着手機,半躺在牀上,自己上網、聽歌。

江寒將高老師發送來的part012.rar和part013.rar下載下來,連同夏雨菲下載的前11個文件,放在了同一個文件夾中。

然後在第1個文件上點擊鼠標右鍵,選擇用WinRAR解壓縮,很快就得到了數據包。

一共兩個文件,train-images-idx3-ubyte與train-labels-idx1-ubyte。

idx3-ubyte和idx1-ubyte都是自定義的文件格式,官網上就有格式說明。

train-images文件大小超過1g,保存了20萬張手寫數字的圖片信息。

而train-labels中則存儲了20萬個標籤數據,與train-images一一對應。

和公開版本的MNIST不同,用於比賽的這個手寫數字數據集,數據量要大出好幾倍。

Kaggle官方將數據集分爲兩部分,訓練集train向參賽選手公開,而測試集test則內部保存。

比賽的形式很簡單,大家根據公開的訓練集,編寫自己的程序,提交給主辦方。

主辦方用不公開的測試集數據,對這些程序逐一進行測試,然後比較它們在測試集上的表現。

主要指標是識別率,次要指標是識別速度等。

這是“人工神經網絡”在這類競技場上的初次亮相,江寒可不想鎩羽而歸。

事實上,如果想追求更好的成績,最好的辦法,就是弄出卷積神經網絡(CNN)來。

那玩意是圖像識別算法的大殺器。

在“機器學習”這個江湖中,CNN的威力和地位,就相當於武俠世界中的倚天劍、屠龍刀。

CNN一出,誰與爭鋒!

只可惜,這個東西江寒現在還沒研究出來。

現上轎現扎耳朵眼,也來不及了。

再說,飯要一口口吃,搞研究也得一步步來。

跨度不能太大嘍,免得扯到蛋……

所以在這次比賽中,江寒最多隻能祭出“帶隱藏層的全連接神經網絡”(FCN)。

有了這個限制,就好比戴着鐐銬跳舞,給比賽平添了不少難度和變數。

那些發展了幾十年的優秀算法,也不見得會輸普通的FCN多少。

所以,現在妄言冠軍十拿九穩,還有點爲時過早。

不過,有挑戰才更有趣味性嘛,穩贏的戰鬥打起來有什麼意思呢?

江寒根據官網上找到的數據格式說明文檔,編寫了一個文件解析函數,用來從兩個train文件中提取數據。

train-images-idx3-ubyte的格式挺簡單的,從文件頭部連續讀取4個32位整形數據,就能得到4個參數。

用來標識文件類型的魔數m、圖片數量n、每張圖片的高度h和寬度w。

從偏移0016開始,保存的都是圖片的像素數據。

顏色深度是8位,取值範圍0~255,代表着256級灰度信息,每個像素用一個字節來保存。

然後,從文件頭中可以得知,每張圖片的分辨率都是28×28。

這樣每張圖片就需要784個字節來存儲。

很容易就能計算出每張圖片的起始地址,從而實現隨機讀取。

如果連續讀取,那就更簡單了,只需要每次讀取784個字節,一共讀取n次,就能恰好讀取完整個文件。

需要注意的是,圖像數據的像素值,在文件中存儲類型爲unsigned char型,對應的format格式爲B。

所以在Python程序中,在image_size(取值爲784)這個參數的後面,還要加上B參數,這樣才能讀取一整張圖片的全部像素。

如果忘了加B,則只能讀取一個像素……

train-labels-idx1-ubyte格式更加簡單。

前8個字節是兩個32位整形,分別保存了魔數和圖片數量,從偏移0009開始,就是unsigned byte類型的標籤數據了。

每個字節保存一張圖片的標籤,取值範圍0~9。

江寒很快就將標籤數據也解析了出來。

接下來,用Matplot的繪圖功能,將讀取出來的手寫數字圖片,繪製到屏幕上。

然後再將對應的標籤數據,也打印到輸出窗口,兩者一比較,就能很輕鬆地檢驗解析函數是否有問題。

將解析函數調試通過後,就可以繼續往下進行了。

首先要將圖片的像素信息壓縮一下,二值化或者歸一化,以提高運算速度,節省存貯空間。

像素原本的取值範圍是0~255。

二值化就是將大於閾值(通常設爲中間值127)的數值看做1,否則看做0,這樣圖片數據就轉換成了由0或者1組成的陣列。

歸一化也比較簡單,只需要將每個像素的取值除以最大值255,那麼每個像素的取值空間,就變成了介於0和1之間的浮點數。

兩種手段各有利弊,江寒決定每種都試一下,看看在實踐中,哪個表現更好一些。

由於江寒使用的是全連接網絡,而不是卷積神經網絡,所以還要將2維的圖片,轉換成1維的向量。

這個步驟非常簡單,將二維的圖片像素信息,一行接一行按順序存入一維數組就行。

事實上,在解析數據文件的時候,已經順便完成了這一步,所以並不需要額外的操作。

20萬張圖片,就是20萬行數據。

將這些數據按順序放入一個200000×784的二維數組裡,就得到了Feature。

Lable的處理比較簡單,定義一個具有20萬個元素的一維整形數組,按順序讀入即可。

江寒根據這次的任務需求,將20萬條訓練數據劃分成了2類。

隨機挑選了18萬個數據,作爲訓練集,剩餘2萬個數據,則作爲驗證集validate。

這樣一來,就可以先用訓練集訓練神經網絡,學習算法,然後再用未學習過的驗證集進行測試。

根據FCN網絡在陌生數據上的表現,就能大體推斷出提交給主辦方後,在真正的測試集上的表現。

寫完數據文件解析函數,接下來,就可以構建“帶隱藏層的全連接人工神經網絡”FCN了。

類似的程序,江寒當初爲了寫論文,編寫過許多次。

可這一次有所不同。

這是真正的實戰,必須將理論上的性能優勢,轉化爲實實在在、有說服力的成績。

因此必須認真一些。

打造一個神經網絡,首先需要確定模型的拓撲結構。

輸入層有多少個神經元?

輸出層有多少個神經元?

設置多少個隱藏層?

每個隱藏層容納多少個神經元?

這都是在初始設計階段,就要確定的問題。

放在MNIST數據集上,輸入層毫無疑問,應該與每張圖片的大小相同。

也就是說,一共有784個輸入神經元,每個神經元負責讀取一個像素的取值。

輸出層的神經元個數,一般應該與輸出結果的分類數相同。

數字手寫識別,是一個10分類任務,共有10種不同的輸出,因此,輸出層就應該擁有10個神經元。

當輸出層的某個神經元被激活時,就代表圖片被識別爲其所代表的數字。

這裡一般用softmax函數實現多分類。

先把來自上一層的輸入,映射爲0~1之間的實數,進行歸一化處理,保證多分類的概率之和剛好爲1。

然後用softmax分別計算10個數字的概率,選擇其中最大的一個,激活對應的神經元,完成整個網絡的輸出。

至於隱藏層的數量,以及其中包含的神經元數目,並沒有什麼一定的規範,完全可以隨意設置。

隱藏層越多,模型的學習能力和表現力就越強,但也更加容易產生過擬合。

所以需要權衡利弊,選取一個最優的方案。

起步階段,暫時先設定一個隱藏層,其中包含100個神經元,然後在實踐中,根據反饋效果慢慢調整……

確定了網絡的拓撲結構後,接下來就可以編寫代碼並調試了。

調試通過,就加載數據集,進行訓練,最後用訓練好的網絡,進行預測。

就是這麼一個過程。

江寒先寫了一個標準的FCN模板,讓其能利用訓練數據集,進行基本的訓練。

理論上來說,可以將18萬條數據,整體放進網絡中進行訓練。

但這種做法有很多缺點。

一來消耗內存太多,二來運算壓力很大,訓練起來速度極慢。

更嚴重的是,容易發生嚴重的過擬合。

要想避免這些問題,就要採取隨機批次訓練法。

第238章 競爭對手?第283章 給靈感充點值第69章 論如何追女孩紙第74章 88年的草莓第204章 是男人就餵飽她第96章 暫時保管?第242章 搞出問題怎麼辦?第272章 冤死駱駝的最後一根稻草第38章 賣歌第290章 其實已經有點過時了第22章 名偵探婉瑩第287章 夢裡不知身是客第335章 不走尋常路第117章 沒聽說過?第363章 終於對《我的世界》下手了……第416章 有困難找組織第377章 打造自己的科技品牌第205章 江寒的心性第31章 《水果忍者》和《2048》第53章 大功告成第59章 上乾貨第244章 屋裡陪他小電影?第85章 吊橋效應第336章 女爲悅己者容第383章 全自動刷分第29章 王璐有點自閉第143章 別人笑我太瘋癲第47章 都選C第248章 需要對答案嗎?第71章 憑什麼是江寒?第155章 到底什麼關係?第291章 驚動了各路神仙第144章 時序邏輯電路和寄存器第110章 敲竹槓第408章 初入燕園第136章 打造算術邏輯單元第137章 聽鬆小院,好地方?第268章 最終版本第261章 曉之以理,動之以錢第50章 可能整大發了第106章 查戶口第229章 從源頭上防仿製?第209章 校服就是最正式的裝扮第375章 沒有操作系統怎麼辦?第295章 全世界沒人教得了第397章 作曲大師,自帶乾糧第393章 男人不能沒有事業第242章 搞出問題怎麼辦?第215章 儀表堂堂,器宇軒昂第326章 “戰神一號”的弱點第248章 需要對答案嗎?第58章 作報告?第114章 收音機,以及1:10?第289章 對等原則第351章 送她點什麼?第247章 對拍、Day1第三題第226章 還能剩下幾個?第382章 電動車和機械臂第317章 爲什麼偏偏是那串數字?第340章 實力還是運氣?第398章 商用級手寫識別算法第419章 媽可能是親媽,爹……第159章 想怎麼看,就怎麼看?第335章 不走尋常路第102章 怎麼就這麼不好對付?第135章 巧合?考驗?第359章 大佬,怪蜀黍?第95章 再花5000也值第225章 papa別鬧!第152章 你的承諾呢?第165章 看誰先慫第8章 裝〇也要講基本法第301章 人間喜劇,喜聞樂見第94章 水論文的正確姿勢第12章 重生的使命第369章 點八個,贈十個……第248章 需要對答案嗎?第92章 《激光雕刻機》第33章 蘋果開發者賬號第212章 他和夏總到底什麼關係?第257章 NOIP中最難的題型第31章 《水果忍者》和《2048》第65章 論文過審第410章 六度分割理論?今天只有一章了第8章 裝〇也要講基本法第34章 遊戲發佈第62章 校長的鼓勵第91章 這麼忙嗎?第154章 腦力提升的副作用第3章 一個大膽的想法第190章 現在的高中生啊……第248章 需要對答案嗎?第63章 巧嗎?第189章 查房第11章 像我這麼專一第387章 打印機和繪圖儀第359章 大佬,怪蜀黍?第5章 三個系統準備就緒
第238章 競爭對手?第283章 給靈感充點值第69章 論如何追女孩紙第74章 88年的草莓第204章 是男人就餵飽她第96章 暫時保管?第242章 搞出問題怎麼辦?第272章 冤死駱駝的最後一根稻草第38章 賣歌第290章 其實已經有點過時了第22章 名偵探婉瑩第287章 夢裡不知身是客第335章 不走尋常路第117章 沒聽說過?第363章 終於對《我的世界》下手了……第416章 有困難找組織第377章 打造自己的科技品牌第205章 江寒的心性第31章 《水果忍者》和《2048》第53章 大功告成第59章 上乾貨第244章 屋裡陪他小電影?第85章 吊橋效應第336章 女爲悅己者容第383章 全自動刷分第29章 王璐有點自閉第143章 別人笑我太瘋癲第47章 都選C第248章 需要對答案嗎?第71章 憑什麼是江寒?第155章 到底什麼關係?第291章 驚動了各路神仙第144章 時序邏輯電路和寄存器第110章 敲竹槓第408章 初入燕園第136章 打造算術邏輯單元第137章 聽鬆小院,好地方?第268章 最終版本第261章 曉之以理,動之以錢第50章 可能整大發了第106章 查戶口第229章 從源頭上防仿製?第209章 校服就是最正式的裝扮第375章 沒有操作系統怎麼辦?第295章 全世界沒人教得了第397章 作曲大師,自帶乾糧第393章 男人不能沒有事業第242章 搞出問題怎麼辦?第215章 儀表堂堂,器宇軒昂第326章 “戰神一號”的弱點第248章 需要對答案嗎?第58章 作報告?第114章 收音機,以及1:10?第289章 對等原則第351章 送她點什麼?第247章 對拍、Day1第三題第226章 還能剩下幾個?第382章 電動車和機械臂第317章 爲什麼偏偏是那串數字?第340章 實力還是運氣?第398章 商用級手寫識別算法第419章 媽可能是親媽,爹……第159章 想怎麼看,就怎麼看?第335章 不走尋常路第102章 怎麼就這麼不好對付?第135章 巧合?考驗?第359章 大佬,怪蜀黍?第95章 再花5000也值第225章 papa別鬧!第152章 你的承諾呢?第165章 看誰先慫第8章 裝〇也要講基本法第301章 人間喜劇,喜聞樂見第94章 水論文的正確姿勢第12章 重生的使命第369章 點八個,贈十個……第248章 需要對答案嗎?第92章 《激光雕刻機》第33章 蘋果開發者賬號第212章 他和夏總到底什麼關係?第257章 NOIP中最難的題型第31章 《水果忍者》和《2048》第65章 論文過審第410章 六度分割理論?今天只有一章了第8章 裝〇也要講基本法第34章 遊戲發佈第62章 校長的鼓勵第91章 這麼忙嗎?第154章 腦力提升的副作用第3章 一個大膽的想法第190章 現在的高中生啊……第248章 需要對答案嗎?第63章 巧嗎?第189章 查房第11章 像我這麼專一第387章 打印機和繪圖儀第359章 大佬,怪蜀黍?第5章 三個系統準備就緒