1. 程式人生 > >windows下編譯tensorflow原始碼 用其c++介面呼叫訓練好的模型

windows下編譯tensorflow原始碼 用其c++介面呼叫訓練好的模型

最近在研究如何用tensorflow的python庫訓練模型,生成pb檔案,再在c++中呼叫這個模型,完成前向的預測;所以就要使用其c++介面,這需要從原始碼編譯tensorflow。

根據官網給出的編譯器對應關係(詳見我的另一篇部落格),最新版(1.12版)的tensorflow需要用bazel去編譯,但是我弄了半天然後失敗了。。 所以我就用cmake去編譯舊版(1.4版),其實1.10版後來試過了也可以用此方法。

步驟:

一、環境準備

  1. 作業系統:windows
  2. 安裝visual studio 2015(即vs14)
  3. 安裝python3.5或3.6(或直接安裝anaconda,下載地址
    詳見我的另一篇部落格
    )並加入環境變數
  4. 安裝cmake,版本號需要>=3.6.3,cmake官方下載地址
  5. 科學上網(最好有,否則一些依賴的檔案可能下載不下來導致編譯失敗,錯誤資訊為:error downloading xxx failed)

二、操作步驟

  1. git clone -b v1.4.0 https://github.com/tensorflow/tensorflow.git

    用cmake預編譯。 在SWIG_EXECUTABLE選項中輸入swig.exe的絕對路徑;底下打勾的可以視情況選擇。 然後點Configure,再點Generate。如果出錯了可能是環境變數沒設定好。

  2. 先用vs開啟G:\tensorflow-1.4.0\tensorflow\contrib\cmake\build\re2\src\re2中的RE2.sln,分別將re2_test.cc和search_test.cc的編碼方式修改掉,方法:雙擊開啟cc檔案→單擊選單欄中的檔案(F)→高階儲存選項(檔案下拉選單中沒有高階儲存選項的請自行百度一下,設定一下就有了),改成UTF-8帶簽名,如圖所示。然後生成RE2的ALL_BUILD。       不這樣做的話,編譯時re2檔案會報錯,錯誤資訊: error C2001: 常量中有換行符         

  3. 用vs開啟G:\tensorflow-1.4.0\tensorflow\contrib\cmake\build中的tensorflow.sln,分別將前面這幾個以下劃線開頭的專案的屬性修改一下,方法:右擊專案→屬性(R)→配置屬性→連結器→常規→附加庫目錄,新增$(SolutionDir)$(Configuration);  如圖所示。 不這樣做的話,編譯這幾個專案時會報錯

    ,錯誤資訊: fatal error LNK1181: 無法開啟輸入檔案“\pywrap_tensorflow_internal.lib”                                                                                                                          

  4. 設定最多並行生成幾個專案,方法:選單欄中的工具(T)→選項(O)→專案和解決方案→生成並執行,本來是4,可以改小一點,我改成了2。  不這樣做的話,編譯時會導致堆記憶體被耗盡,錯誤資訊: fatal error C1060: 編譯器的堆空間不足

  5. 翻好牆,關掉360,關掉防火牆,關掉其他程式給編譯騰出記憶體空間,現在可以開始生成ALL_BUILD了。大約要等3個小時左右。