问题场景:

想使用Matlab进行神经网络的建立,下载MatConvNet工具箱后,运行官网的Quick Start程序出现标题所示load错误。

用load加载训练好的.mat模型时出现错误。

matconvnet官网上的程序:

% setup MatConvNet
run  matlab/vl_setupnn
% download a pre-trained CNN from the web (needed once)
urlwrite(...
  'http://www.vlfeat.org/matconvnet/models/imagenet-googlenet-dag.mat', ...
  'imagenet-googlenet-dag.mat') ;
% load the pre-trained CNN
net = dagnn.DagNN.loadobj(load('imagenet-googlenet-dag.mat')) ;
net.mode = 'test' ;
% load and preprocess an image
im = imread('peppers.png') ;
im_ = single(im) ; % note: 0-255 range
im_ = imresize(im_, net.meta.normalization.imageSize(1:2)) ;
im_ = bsxfun(@minus, im_, net.meta.normalization.averageImage) ;
% run the CNN
net.eval({'data', im_}) ;
% obtain the CNN otuput
scores = net.vars(net.getVarIndex('prob')).value ;
scores = squeeze(gather(scores)) ;
% show the classification results
[bestScore, best] = max(scores) ;
figure(1) ; clf ; imagesc(im) ;
title(sprintf('%s (%d), score %.3f',...
net.meta.classes.description{best}, best, bestScore)) ;
---------运行结果-----------------------------------------
>>>错误使用 load
无法读取 MAT 文件 C:\Users\Focus\Desktop\NN\imagenet-googlenet-dag.mat。不是二进制 MAT 文件。请尝试执行 load -ASCII 以便以文本形式读取。
出错 scratch1 (line 10)
net = dagnn.DagNN.loadobj(load('imagenet-googlenet-dag.mat')) ;

原因分析:

urlwrite函数并没有将.mat模型下载到本地,而是将网页的HTML信息保存到了imagenet-googlenet-dag.mat文件中

查看imagenet-googlenet-dag.mat的大小可以看出文件太小了。
在这里插入图片描述
或者用在matlab交互界面用edit(‘imagenet-googlenet-dag.mat’)查看文件情况也可以看出:
在这里插入图片描述

解决方案:

到MatConvNet官网直接下载模型放入工作目录中使用

如直接在官网下载imagenet-googlenet-dag.mat模型,其属性如下图所示,大小正常。
在这里插入图片描述
再运行例程即可正常运行。

% load the pre-trained CNN
net = dagnn.DagNN.loadobj(load('imagenet-googlenet-dag.mat')) ;
net.mode = 'test' ;
% load and preprocess an image
im = imread('peppers.png') ;
im_ = single(im) ; % note: 0-255 range
im_ = imresize(im_, net.meta.normalization.imageSize(1:2)) ;
im_ = bsxfun(@minus, im_, net.meta.normalization.averageImage) ;
% run the CNN
net.eval({'data', im_}) ;
% obtain the CNN otuput
scores = net.vars(net.getVarIndex('prob')).value ;
scores = squeeze(gather(scores)) ;
% show the classification results
[bestScore, best] = max(scores) ;
figure(1) ; clf ; imagesc(im) ;
title(sprintf('%s (%d), score %.3f',...
net.meta.classes.description{best}, best, bestScore)) ;
                                    当尝试调用一个不存在的函数时,会出现函数不存在错误。这可能是由于函数名拼写错误、函数文件不存在或函数不在Matlab的搜索路径中等引起的。在这个例子中,myFunction函数不存在,将会导致函数不存在错误。在这个例子中,尝试计算A的平方将会占用大量内存,可能导致内存溢出错误。这可能是由于索引越界、使用错误的索引值或尝试对非数组变量进行索引等引起的。语法错误是最常见的错误类型之一。这可能是由于文件不存在、文件路径错误无法访问文件等引起的。在这个例子中,索引值4超出了数组A的范围,将会导致数组索引错误错误使用 load无法读取 MAT 文件 C:\XX\MathWorks\MATLAB\R2018a\matlabprefs.mat。不是二进制 MAT 文件。请尝试执行 load -ASCII 以便以文本形式读取。出错 prefutils>loadPrefs (line 42)fileContents = load(prefFile);出错 prefutils (line 10)[vara...
                                    MATLAB:数据保存save、dlmwrite和数据读取load错误使用 load无法读取 MAT 文件mndata.mat。不是二进制 MAT 文件。
 var jBinary = require ( 'jbinary' )
var MAT = require ( 'jMatFile' )
jBinary . load ( 'myMat.mat' , MAT ) . then ( function ( binary ) {
  var mat = binary . readAll
  // or equivalently
  var mat = binary . read ( 'mat' )
  // ... do stuff with mat
此排版设计用于充分利用类型化数组的 
                                    在运行matlab程序时,如果出现加载数据错误,则是因为没有定位到相应文件夹。通过红色框左边的选项(浏览文件夹)定位到我们所运行.m程序所在的文件夹即可。
                                    应该是2010年左右吧,写这个文章最开始源于自己的切身经历,当时自己就是硬盘出现了“文件或目录损坏且无法读取错误,又不想用数据恢复软件倒腾。开始在网上找相关的原因,但是找出来的文章大部分都是复制黏贴出来,极少数有质量。也有广告,但是就是纯推广自己的数据恢复服务,完全没有质量。找了很久的资料,从解决方案到原因,再到NTFS硬盘结构等都找了一遍。最后硬盘被我修复了。然后我把修复过程贴出来了。因为自己没有经常上博客,也不知道这篇文章的阅读量那么大,很多人在博客里留言或私信的都没有及时回复。