神經網絡課需要使用這個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腳本。