經過了前面的開胃菜,項目正式開始。一步步講解這個模型怎么玩起來的。從C 到 matlab 到 FPGA ,三個平臺聯合起來完成這個 由 RTL 實現 CNN 的項目。
第一步,講解深度學習模型在C中是怎么實現的,也就是梳理數據流怎么運算的。
第二步,講解這個數據怎么使用,如何去一步步驗證自己的設計。
第三步,根據前面的理解,在FPGA中如何去設計自己的代碼。
首先,C的源碼前面的文章中已經公開了,第一步當然是理解深度學習模型在C中是怎么實現的。
這個深度學習的模型 LeNet5 實現的功能是 MNIST 數據識別。MNIST數據集是一個手寫數字的圖片集,然后被制作成了一個特殊的文件格式 —— 已經不是圖片了,變成了這么一個東西:
網站上下載下來的是一個gz壓縮文件,解壓之后就是一個idx3-ubyte格式的文件。它包含了6w張用來做網絡模型訓練的圖片,和1w張用來測試網絡模型的圖片。每張圖片再搭配一個標簽 —— 表明它是數據幾。所以整個數據集就是 7w張圖片 加 7w個標簽。
不過你可以通過python輕松導出來,可以看到具體的圖片和標簽。解釋這么多也夠用了,有興趣的朋友可以百度一下 MNIST ,比如下圖,就是一個博主從數據集里扒出來的圖。
先理解了數據集,再看看 C語言源碼。第一步先分別導入訓練數據集和標簽,再導入里測試數據集和標簽,然后開始 load 模型 —— 第一次運行模型為空,于是對模型進行初始化。細心一點往下看這個初始化過程會覺得很有特色 —— 刻意讓數據很隨機,讓它們都不相同是有好處,具體什么好處可以去看看吳恩達的視頻。(我看了,云里霧里的還是不懂,所以也解釋不清楚)
后面就是訓練和測試了,for是我后面添加的,可以讓它訓練很多次,提升精度。下面就是測試和打印,然后保存模型,釋放空間。主程序完畢。
拿到開源代碼,運行一下,結果就是這樣子的
我就是在這個代碼基礎上,理解LeNet5的結構,然后量化。量化后再驗證精度,然后導出模型,導出計算的中間數據。這個 C 代碼就算物盡其用了。
有人覺得難懂?沒關系,對于這個項目而言,我已經把C程序簡化成了一張圖,你可以忽略上述所有文字和程序,記住這張圖就行。圖的解釋可以看QQ群中的文檔,后面我還會詳細講解這張圖的,以及圖中用到的數據。
原文標題:LeNet5 MNIST 的 FPGA實現 3
文章出處:【微信公眾號:FPGA攻城獅之家】歡迎添加關注!文章轉載請注明出處。
-
FPGA
+關注
關注
1629文章
21736瀏覽量
603319 -
數據
+關注
關注
8文章
7026瀏覽量
89026 -
代碼
+關注
關注
30文章
4788瀏覽量
68603 -
cnn
+關注
關注
3文章
352瀏覽量
22213
原文標題:LeNet5 MNIST 的 FPGA實現 3
文章出處:【微信號:gh_99a29eb83412,微信公眾號:FPGA攻城獅之家】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論