1. 程式人生 > >編譯Caffe-Win錯誤集錦(持續更新)

編譯Caffe-Win錯誤集錦(持續更新)

原文地址:http://blog.sina.com.cn/s/blog_141f234870102w8is.html

 引入的unistd.h檔案裡面重定義了int8_t  ,用記事本 開啟檔案登出之。

2. error C3861: 'getpid': identifier not found    C:\Tools\caffe-master\src\caffe\common.cpp    26
     解決:在common.cpp 裡面新增 #include

     修改:

  1. pid = getpid(); ——>pid = _getpid();  

3.  error C3861: 'usleep': identifier not found    C:\Tools\caffe-master\src\caffe\test\test_benchmark.cpp    65

      7.出現 'usleep': identifier not found

     這裡因為VC中沒有usleepusleep是微妙級別的,所以需要把程式碼改為

  1. usleep(is->audio_st && is->show_audio ? rdftspeed*1000 : 5000);  
  2. —>    Sleep (is->audio_st && is->show_audio ? rdftspeed*1 : 5);  
  3. usleep(300 * 1000); —> Sleep(300);  
新增:#include

4. error C3861: 'snprintf': identifier not found    C:\Tools\caffe-master\src\caffe\solver.cpp    331

     在solver.cpp裡面新增      #include

   snprintf  修改為 _snprintf

5. error C3861: '__builtin_popcount': identifier not found    C:\Tools\caffe-master\src\caffe\util\math_functions.cpp    346

     解決:自己寫一個函式__builtin_popcount

  1. template <</span>typename Dtype>  
  2. unsigned int __builtin_popcount(Dtype u)  
  3. {  
  4.     u = (u & 0x55555555) + ((u >> 1) & 0x55555555);  
  5.     u = (u & 0x33333333) + ((u >> 2) & 0x33333333);  
  6.     u = (u & 0x0F0F0F0F) + ((u >> 4) & 0x0F0F0F0F);  
  7.     u = (u & 0x00FF00FF) + ((u >> 8) & 0x00FF00FF);  
  8.     u = (u & 0x0000FFFF) + ((u >> 16) & 0x0000FFFF);  
  9.     return u;  
  10. }//wishchin!!!


6.error : identifier "::caffe::kBNLL_THRESHOLD" is undefined in device code C:\Tools\caffe-master\src\caffe\layers\bnll_layer.cu 36
參考:

        解決:在bnll_layer.cu    裡修改

  1. Dtype expval = exp(min(in_data[index], Dtype(kBNLL_THRESHOLD)));  
  2. ——>Dtype expval = exp(min(in_data[index], Dtype(50)));  

7. error C2660: 'mkdir' : function does not take 2 arguments    C:\Tools\caffe-master\src\caffe\test\test_data_layer.cpp    71

參考:

     解決:

  1. CHECK_EQ(mkdir(filename_->c_str(), 0744), 0) << "mkdir " << filename_<< "failed";   
裡面的第二個引數去掉。

8.error C2784: '_Ty std::max(std::initializer_list<_Elem>,_Pr)' : could not de

     解決:呼叫函式處 把std::max 用括號 括起來  (std::max)(std::initializer_list<<br>

9.error C4996: 'std::_Copy_impl': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS.

    參考:http://www.zhihu.com/question/26242158

   解決:應該這樣新增 -D去掉 屬性-> c\c++ -> 前處理器 -> 前處理器定義 裡新增 _SCL_SECURE_NO_WARNINGS 編譯成功 ,

XXX:不斷出現的

        error C1075: end of file found before the left parenthesis '(' at '  test_infogain_loss_layer.cpp    71

       也沒有找到哪裡錯了。應該是Define語句出現問題, 貌似可以不用管它.............

10. error C3861: 'close': identifier not found    \src\caffe\util\io.cpp

error C3861: 'open': identifier not found    \src\caffe\util\io.cpp

在io.hpp檔案里加入#include

11. Check failed: error == cudaSuccess (2 vs. 0)  out of memory

train的batch_size設定過大,改小後可以. (個人經驗不足所以一直在修改生成h5 file裡的“chunksize”這個變數從64改到了1都還是會有 out of memory 的錯誤,而且也發現怎麼改那個變數所消耗的記憶體數幾乎不變。為此鬱悶了一整天....後來才發現應該要改的是 train.prototxt裡的 “batch_size", 一改以後馬上記憶體就小了。在此記錄一下。)

12.Check failed: error == cudaSuccess (38 vs. 0)  no CUDA-capable device is detected

可能原因:solver的引數沒有設定或錯誤

13.check failed:error==cudasuccess(11  vs. 0) invalid argument

可能原因:test的batch_size 和solver的test_iter設定有問題

14.cudnn.h中

inline const char* cudnnGetErrorString(cudnnStatus_t status)  修改為

inline const char* CUDNNWINAPI  cudnnGetErrorString(cudnnStatus_t status)

15.error : identifier "cudnnTensor4dDescriptor_t" is undefined

cudnn版本不相容問題,下載cudnn R1替換掉就可以。