Visual Studio 2008編譯機器學習演算法庫Shark

來源:互聯網
上載者:User

標籤:機器學習 shark boost

    Shark是一個快速、模組化、功能豐富且開源的C++機器學習庫。它實現了線性和非線性最佳化、基於核函數的學習演算法、神經網路等多種機器學習演算法。Shark依賴於CMake和Boost,與Windows、Solaris、MacOS X和Linux相容。當前最新的官方版本為Shark 3.0,可以從該項目的SVN上擷取源碼(點擊開啟連結)

    本文描述了Windows 7(64位)上基於Visual Studio 2008編譯Shark 3.0源碼並安裝的完整過程,同時對安裝過程中產生的問題進行說明。該過程依賴於CMake 3.2.1(點擊開啟連結)和Boost 1.57.0(點擊開啟連結)。

    首先利用Visual Studio 2008中編譯安裝Boost。開啟Visual Studio Tools目錄下的Visual Studio 2008 Command Prompt,進入Boost所在目錄(這裡為D:\code\boost_1_57_0),輸入以下命令:

bootstrap --prefix="C:\Program Files\boost_1_57_0"

    運行結果如所示:


      booststrap會在目前的目錄中產生b2.exe和bjam.exe,如所示。b2是整個Boost.Build構建系統的引擎,在Boost的早期版本中,該功能由bjam實現;從Boost 1.47.0開始,官方將bjam改名為b2,考慮到相容問題,仍然保留了bjam。


    在目前的目錄中執行以下命令:

b2 --build-type=complete --toolset=msvc-9.0 --layout=versioned --prefix="C:\Program Files\boost_1_57_0" --without-mpi install

    其中,參數“--build-type=complete”使得Boost.Build建立庫所支援的所有版本;“--toolset=msvc-9.0”表示用於編譯Boost的工具集是msvc 9.0工具集,該工具集對應於Visual Studio 2008。“--layout=versioned”表示Boost.Build產生的庫檔案名稱應當包含Boost版本號碼,編譯器名稱及版本號碼,以及一些其他的構建屬性;“--prefix=C:\Program Files\boost_1_57_0”指定了Boost標頭檔及產生庫的存放目錄;“--without-mpi”要求Boost.Build不構建MPI庫(Message Passing Interface,一種用於在高效能並行計算中進行訊息傳遞的庫。在某些版本的Boost中,產生MPI庫可能會出現“dumplicate name”錯誤)。上述過程完成後(大約30分鐘,具體時間因機器而異),將在指定目錄(此處為C:\Program Files\boost_1_57_0)中產生include和lib兩個目錄,至此完成boost的編譯和構建,接下來的過程為Shark的編譯和構建。

    然後開啟CMake,將源碼目錄和構建目錄均設為Shark根目錄(此處為D:\code\Shark),如所示:


    點擊“Add Entry”為CMake設定緩衝條目(也可以用命令列方式進行,具體可參考CMake官方文檔)。首先添加BOOL型參數Boost_NO_SYSTEM_PATHS,如所示(注意勾選Value複選框,表示將此BOOL值設定為真):


    然後添加Path型參數BOOST_ROOT,該參數用於指定Boost庫所在目錄(此處為C:\Program Files\boost_1_57_0),如所示:


    完成參數設定後,點擊“Configure”按鈕,選擇構造器“Visual Studio 9 2008”,如所示:


    完成上述配置後,Configure過程開始,該過程產生一系列configure檔案。運行成功後再點擊“Generate”按鈕,產生相應的Visual Studio工程檔案(.vcproj)和解決方案檔案(.sln)。


    執行Generate後,在Shark根目錄下產生shark.sln檔案,用Visual Studio 2008開啟可以看到所有的240個工程,如所示:


    修改include/shark/Algorithms/Trainers/RFTrainer.h檔案,添加如下代碼:

#include <set>

    分別在debug和release模式下構建整個shark解決方案,忽略所有警告,即可得到相應的庫檔案。

    在編譯安裝Shark的過程中可能遇到的一些錯誤:

    1. 用CMake進行Configure的過程中,出現如下錯誤資訊:

CMake Error at C:/Program Files (x86)/CMake/share/cmake-3.2/Modules/FindBoost.cmake:1182 (message):  Unable to find the requested Boost libraries.  Boost version: 1.57.0  Boost include path: C:/Program Files/boost_1_57_0/include/boost-1_57  Could not find the following static Boost libraries:          boost_system          boost_date_time          boost_filesystem          boost_program_options          boost_serialization          boost_thread          boost_unit_test_framework  No Boost libraries were found.  You may need to set BOOST_LIBRARYDIR to the  directory containing Boost libraries or BOOST_ROOT to the location of  Boost.Call Stack (most recent call first):  CMakeLists.txt:168 (FIND_PACKAGE)
    可能原因:BOOST_ROOT設定錯誤,導致CMake無法找到Boost安裝目錄;執行b2時,工具集未選擇或選擇錯誤,導致產生的Boost庫檔案名稱未包含或錯誤地包含了編譯器名稱和版本資訊。

    2. 編譯連結shark.sln過程中,出現如下編譯錯誤:

Shark\include\shark/Algorithms/Trainers/RFTrainer.h(168) : error C2976: 'std::set' : too few template arguments

    可能原因:RFTrainer.h檔案未包含set標頭檔。

    3. 編譯連結shark.sln過程中,出現如下(或類似)連結錯誤:

LINK : fatal error LNK1104: cannot open file 'libboost_serialization-vc90-mt-gd-1_57.lib'

    可能原因:BOOST_ROOT設定錯誤,導致CMake無法找到Boost安裝目錄;執行b2時,layout參數未設定為versioned,導致產生的Boost庫檔案名稱未包含編譯器名稱和版本資訊。

    4. 部分工程出現如下(或類似)編譯錯誤:

Shark\include\shark/Models/Kernels/MultiTaskKernel.h(100) : error C2529: 'abstract declarator' : reference to reference is illegal

    可能原因:引用之引用非法。Shark 3.0中大量使用C++模板技術,時常出現雙重引用的情況。可能的解決方案是利用Boost提供的Call Trait機制,將模板類中某些成員函數的參數替換為call_traits中的等價運算式,或更換至更新版本的編譯器。

Visual Studio 2008編譯機器學習演算法庫Shark

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.