• 使用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脚本。

      

  • 相关阅读:
    【排序】题解_P1093奖学金
    简单了解连接服务器的要求
    centos7安装(纯文字版)
    JAVA虚拟机
    集合
    IO流
    反射
    多线程
    JAVA基础
    博客园皮肤文档
  • 原文地址:https://www.cnblogs.com/chester-cs/p/14115839.html
Copyright © 2020-2023  润新知