我需要在Matlab中使用神经网络对手写图像进行测试。当我看到来自MNIST的训练图像中包含的数据时,我发现它是一个不同灰度级的数组,如:
Columns 343 through 351
0 -0.0240 0.4002 0.6555 0.0235 -0.0062 0 0 0
Columns 352 through 360
0 0 0 0 0 0 0 0 0
Columns 361 through 369
0 0 0 -0.0079 0.1266 0.3272 -0.0233 0.0005
对应于20x20图像,展开为1 * 400维阵列。
我已经下载了jpeg格式的图片并执行了以下操作:
im=imread('image.jpg');
gi=rgb2gray(im);
gi=gi(:);
gi=gi';
生成一个数组gi,表示< 1 * 400 uint8&gt ;,当我把它放在Matlab中时,uint8的最后一部分没有出现在MNIST样本中。当我检查它的数组时,它显示以下值:
第289至306栏
58 105 128 133 142 131 76 21 1 0 3 0 2 4 17 12 7 0
Columns 307 through 324
1 15 42 75 97 105 98 73 31 4 1 0 0 0 0 2 4 3
Columns 325 through 342
0 0 1 4 21 37 55 59 46 26 9 0 0 0 0 0 0 0
Columns 343 through 360
1 1 0 0 0 1 7 14 21 21 14 5 0 0 0 0 0 0
Columns 361 through 378
0 0 0 0 0 0 0 0 0 1 2 1 0 0 0 2 0 0
当我想象它们时一切都很好,但是当我想运行我的程序时,会出现以下消息:
??? Error using ==> mtimes
MTIMES is not fully supported for integer classes. At least one input must be scalar.
Error in ==> predict at 15
h1 = sigmoid([ones(m, 1) X] * Theta1');
Error in ==> ex4 at 241
pred = predict(Theta1, Theta2, gi);
即使使用MNIST数据的随机样本测试我的程序时也不会出现这种情况;有什么帮助吗?
答案 0 :(得分:1)
您可以尝试这样的事情:
imfile = 'image.jpg';
im = double(rgb2gray(imread(imfile))); % double and convert to grayscale
im = imresize(im,[20,20]); % change to 20 by 20 dimension
im = im(:); % unroll matrix to vector
im = im./max(im);
请注意,MNIST数据集旨在成为需要最少预处理的良好数据集,而图像实际上最初是黑白(双层),而您使用的是彩色图像。他们还进行了规范化和其他预处理,以制作漂亮的28 x 28图像数据集,我上面的简短代码片段不太可能与MNIST数据集一样好,只是为了尝试修复你的错误。
您的具体错误很可能是因为您没有使用double()。 您可能还会遇到更多错误,因为您的代码需要正确的维度,这可以使用imresize来实现。
有关MNIST数据集的更多信息,请点击此处: http://yann.lecun.com/exdb/mnist/