Re: [問題] 請問Matlab 2009a的SVM已回收
※ 引述《ROCKIT (ROLL)》之銘言:
: 之前在網路上查到有人是用libsvm
: 參考的網頁是:http://diary.blog.yam.com/yyblog/article/6193250
: 但是我照上面的方法用也是不行
: 我的電腦環境是
: win 7 + matlab 2009a + Microsoft Visual C++ 2008 SP1
: 在make的時候就會出現錯誤了...
: 但是我也不知道為什麼就是了...
: 以下是ERROR MESSAGE:
: svm.cpp
: C:\Program Files\MATLAB\R2009a\libsvm-mat-weights-2.91-1\svm.cpp : fatal error C1083: 無法開啟編譯器中產生的檔案: 'svm.obj': Permission denied
: C:\PROGRA~1\MATLAB\R2009A\BIN\MEX.PL: Error: Compile of 'svm.cpp' failed.
: ??? Error using ==> mex at 218
: Unable to complete successfully.
: Error in ==> make at 5
: mex -O -c svm.cpp
: 請問有人也是用libsvm的嗎??
: 或者有其他的tool可以用svm跑預測的
: 謝謝各位了^^
為了避免其他人誤解問題的所在,還是用文章回好了。
問題的關鍵點有以下幾個:
1. Win 7
OK~ 至少讓人知道你用的 OS 是什麼。
如果版本資訊能包含 OS 和 MATLAB 是 32/64 bit 更好。
2. Program Files
程式是放在系統資料夾。
3. fatal error C1083
VC 的錯誤訊息,所以基本上應該是跑過 mex -setup 而且成功呼叫到 VC 了,
不然 MATLAB 應該會回找不到 compiler options file 之類的。
4. Permission denied
權限不足,和前面的 1, 2 連在一起,推測是 User Account Control 造成的。
(就是我在先前推文裡提到的 UAC。)
這個功能開啟的話,OS 會在使用者要更改系統資料夾和設定檔的時候要求確認,
若確認不過,則沒有寫入權限。
如果真的是這個原因,解決方法有以下幾種:
1. 將 libsvm 的資料夾放到"非"系統資料夾的地方。
如果你最後還是希望把它放在系統資料夾裡,就在外面先用 make 編完,
再把 libsvm 的資料夾移到你想放的位置。
不過既然你都要用 Set Path 的方式把那個資料夾的路徑加入了,
就算不把 libsvm 的資料夾放到 Program Files 去也可以運作得很好。
更何況這樣改 MATLAB 安裝地方的資料夾結構會破壞一致性,
到時候移除可能會移不乾淨,不是很建議放到 MATLAB 安裝的地方。
2. 如果你還是想放到 Program Files 而且不想編好之後再放,也是有方法的。
只是這些方法都有潛在的安全性問題,不推薦。
方法之一:以系統管理員身分執行 MATLAB 來 make。
只要在開 MATLAB 時改用如下方式:
MATLAB 捷徑上按右鍵 > 以系統管理員身分執行。
其餘一切照舊,只要在 make 那次這樣開就可以了,以後不用。
方法之二:關閉 UAC 功能。
參考如下網址:
http://lifestory.moqin.com/?p=3617
make 完之後就可以重新開起來。
補充:
建議在 make 之前把原本的 make.m 檔案內容由
mex -O -c svm.cpp
mex -O -c svm_model_matlab.c
mex -O svmtrain.c svm.obj svm_model_matlab.obj
mex -O svmpredict.c svm.obj svm_model_matlab.obj
mex -O libsvmread.c
mex -O libsvmwrite.c
改為
mex -largeArrayDims -O -c svm.cpp
mex -largeArrayDims -O -c svm_model_matlab.c
mex -largeArrayDims -O svmtrain.c svm.obj svm_model_matlab.obj
mex -largeArrayDims -O svmpredict.c svm.obj svm_model_matlab.obj
mex -largeArrayDims -O libsvmread.c
mex -largeArrayDims -O libsvmwrite.c
不改的話在 32 bit 的 MATLAB 上或許看不出差別,
64 bit 的 MATLAB 在編譯的時候也不會有問題。
但是在編完之後在跑的時候 64 bit 的 MATLAB 就會叫了。
最後我想說,想解決問題至少花點時間查查別人給的關鍵字和意見。
或許你查了之後無法完全懂,但這都可以再問,我們也會很樂意回答。
遇到問題沒查資料、沒思考就說沒辦法、不知道、反正出問題了然後丟出來 —
這,是一種擺爛的行為。
--
※ 編輯: DigiPrince 來自: 140.113.94.230 (06/10 10:13)
推
06/10 17:01, , 1F
06/10 17:01, 1F
→
06/10 17:01, , 2F
06/10 17:01, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):