編譯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
修改:
- 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中沒有usleep,usleep是微妙級別的,所以需要把程式碼改為
- usleep(is->audio_st && is->show_audio ? rdftspeed*1000 : 5000);
- —> Sleep (is->audio_st && is->show_audio ? rdftspeed*1 : 5);
- usleep(300 * 1000); —> Sleep(300);
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
- template <</span>typename Dtype>
-
unsigned int __builtin_popcount(Dtype u)
- {
- u = (u & 0x55555555) + ((u >> 1) & 0x55555555);
- u = (u & 0x33333333) + ((u >> 2) & 0x33333333);
- u = (u & 0x0F0F0F0F) + ((u >> 4) & 0x0F0F0F0F);
- u = (u & 0x00FF00FF) + ((u >> 8) & 0x00FF00FF);
- u = (u & 0x0000FFFF) + ((u >> 16) & 0x0000FFFF);
- return u;
- }//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 裡修改
- Dtype expval = exp(min(in_data[index], Dtype(kBNLL_THRESHOLD)));
- ——>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
參考:
解決:
- 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替換掉就可以。