神经网络课需要使用这个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脚本。