使用matconvnet報錯,嘗試將 SCRIPT vl_nnconv 作為函數執行


  神經網絡課需要使用這個matconvnet工具箱,但是matconvnet官網只提供了源碼,windows,macos或者Linux用戶都需要先把源碼編譯成庫(在matlab中這個庫就是mex文件,不知道我的理解對不對)。

  按照官網上的步驟,成功地編譯了matconvnet,並通過了vl_testnn的所有測試。官網guide:https://www.vlfeat.org/matconvnet/install/

  我的環境是matlab2020b,VS2019

  但是,在運行測試代碼的時候會有如下報錯:經過一番思考,解決了這個bug。

  

  奇了怪了,我不是都通過測試了嗎?這個v1_nnconv.m到底是什么?打開這個文件后我很吃驚,因為這個文件通篇都是注釋,只有在最后一行會捕獲notfound錯誤。

  

  結合之前的報錯我認為這個錯誤的產生原因如下:

  1. 首先我們使用了VS2019編譯出了二進制文件,這些庫位於/mex/文件夾下

  2.matconvnet工具箱的邏輯是這樣的,當你沒有編譯成功的話,它就會提示沒有編譯成功。但是如果你編譯成功了,就會調用/mex/文件夾下的庫。

  3.然而,由於bug(我也不知道為什么會產生),matlab認為你調用的時候調用的是上面那個全是注釋的腳本。然后發現這他喵不是個函數(因為函數和腳本的后綴都是.m ...)就報錯了。


  網上有人通過重新運行setup腳本解決了,但是我重新運行了沒用。我的解決手段是這樣的。

  1.不管三七二十一,新建一個文件夾,把你的代碼拷貝進去。

  2.運行代碼,matlab會說:俺找不到XX函數,但是XX地方有。但這個XX地方就是之前找錯的地方!!matlab豬豬。

  3.最重要的一步,將之前編譯的mex文件夾拷貝到新建的文件夾中,在matlab中右鍵,添加到路徑!這樣這些編譯好的庫matlab都能找到了。

  4.再次運行代碼,可能還會有很多個報錯,會說少了一些函數。別急這些函數就是正兒八經定義在.m文件中的函數了,從matconvnet代碼文件夾中復制過來即可!

  5.再跑一遍,成功!

  我的文件夾如下:跑的是test1.m腳本。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM