全聯接神經網路是一種計算量比較大的機器學習模型,在訓練和推斷程序中需要對所有神經元進行矩陣計算。為了加快計算速度,各公司的大佬們采取了不同手段進行資料的抽象和綜合。
通常來說,我們采用卷積操作,將資料進行抽象和綜合,然后送入到全連接神經網路進行最后的計算,實質上就是矩陣運算等數學計算的一系列綜合操作。
熟悉矩陣運算的朋友都知道,矩陣當中的每個元素和其他元素是沒有關聯的,這種特性天然就適合使用并行計算的方式來加快其計算速度。
重點來了!并行計算正是 FPGA 等芯片的強項,利用FPGA將有效實作深度學習神經網路的加速計算(推理),下面是具體的操作展示。
1. 深度學習神經網路的環境搭建
2. 安裝 OpenCL的開發環境,使Intel Arria 10 FPGA作為OpenCL的設備,注意安Intel對應的SDK
3. 利用 Tensorflow 作為框架,實作一個簡單的全連接神經網路
(提供一個演算法描述示例,使用 Mnist 資料集作為訓練和測驗)
1)Mnist 資料集每張圖片為 28×28 像素,將每張圖片的像素點作為輸入
2)第一個隱藏層設定 500 個神經元,與輸入影像的 784 個像素點做計算(矩陣乘法)
3)將得到的結果使用 relu 函式進行結果,只保留數值 >0 的結果,其他的設定為 0
4)第二個隱藏層設定 10 個神經元,與第一個隱藏層的輸出進行計算(矩陣乘法),最終得到 10 個結果作為輸出
從上述的演算法描述當中,我們可以看到實際上就是幾次矩陣的計算程序:一個 [1,784] 和 [784, 500] 的矩陣乘法,得到一個 [1,500] 的中間矩陣;然后這個 [1,500] 的中間矩陣與 [500, 10] 的矩陣進行計算,最終得到一個 [1,10] 的矩陣,這個就是我們的最終結果。
4. 對搭建完成的神經網路進行訓練,訓練之后得到模型檔案
5. 通過一定的操作方式,提取這些模型檔案中的模型引數
6. 把模型引數當作輸入的引數,送入到FPGA當中進行加速計算,實作推理程序
上述神經網路演算法的OpenCL實作,大致如下:

7. 最后使用C/C++撰寫CPU程式,與 FPGA 進行互動,來驗證 OpenCL 演算法實作的正確性。
以下是 CPU 程式的部分代碼。

通過以上步驟,我們就成功的使用OpenCL在Intel FPGA上實作了一個簡單的神經網路的推理加速。
uj5u.com熱心網友回復:
謝LZ,已學習
uj5u.com熱心網友回復:
頂一下,辛苦樓主,對OpenCL不太熟,基于OpenCL的演算法實作方便詳細展示一下嗎?uj5u.com熱心網友回復:
回樓上,英特爾FPGA中國創新中心官網有相關的線上培訓課,有講OpenCL,可以關注一下
uj5u.com熱心網友回復:
樓主整理得很好,繼續學習。uj5u.com熱心網友回復:
去看了一下,相關內容講得挺詳細,比較推薦,初學者可以看看。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/14161.html
標籤:網絡
上一篇:vscode 常用設定
