svmtrain 中的错误,"Y and TRAINING must have the same number of rows"



我使用svmtrain函数对图像进行分类。我犯了这样的错误。

Error using svmtrain (line 253)
Y and TRAINING must have the same number of rows.
Error in svm5 (line 80)
SVMStruct = svmtrain(Training_Set , train_label, 'kernel_function', 'linear');

Training_Set包含图像集,train_lable是用于识别输入图像的类。参考的完整代码

clc
clear all
% Load Datasets
Dataset = 'D:majorprojectimagetraindata';   
Testset  = 'D:majorprojectimagetestset';

% we need to process the images first.
% Convert your images into grayscale
% Resize the images
width=100; height=100;
DataSet      = cell([], 1);
 for i=1:length(dir(fullfile(Dataset,'*.jpg')))
     % Training set process
     k = dir(fullfile(Dataset,'*.jpg'));
     k = {k(~[k.isdir]).name};
     for j=1:length(k)
        tempImage       = imread(horzcat(Dataset,filesep,k{j}));
        imgInfo         = imfinfo(horzcat(Dataset,filesep,k{j}));
         % Image transformation
         if strcmp(imgInfo.ColorType,'grayscale')
            % array of images
            DataSet{j}   = double(imresize(tempImage,[width height])); 
         else
            % array of images
            DataSet{j}   = double(imresize((tempImage),[width height])); 
         end
     end
 end
TestSet =  cell([], 1);
  for i=1:length(dir(fullfile(Testset,'*.jpg')))
     % Training set process
     k = dir(fullfile(Testset,'*.jpg'));
     k = {k(~[k.isdir]).name};
     for j=1:length(k)
        tempImage       = imread(horzcat(Testset,filesep,k{j}));
        imgInfo         = imfinfo(horzcat(Testset,filesep,k{j}));
         % Image transformation
         if strcmp(imgInfo.ColorType,'grayscale')
            % array of images
            TestSet{j}   = double(imresize(tempImage,[width height])); 
         else
            % array of images
            TestSet{j}   = double(imresize(tempImage,[width height])); 
         end
     end
  end
    % Prepare class label for first run of svm
% I have arranged labels 1 & 2 as per my convenience.
% It is always better to label your images numerically
% Note that for every image in our Dataset we need to provide one label.
% we have 10 images and we divided it into two label groups here.
    train_label               = zeros(size(10,1),1);
    train_label(1:4,1)   = 1;         % 1 = naa
    train_label(5:10,1)  = 2;         % 2 = ta

% Prepare numeric matrix for svmtrain
    Training_Set=[];
    for i=1:length(DataSet)
    b = imresize(DataSet{i},[100 100]);
    Training_Set_tmp= b(:);
    %Training_Set_tmp   = reshape(DataSet{i},1, 100*100);
    Training_Set=[Training_Set;Training_Set_tmp];
    end
    Test_Set=[];
    for j=1:length(TestSet)
    b = imresize(TestSet{j},[100 100]);
    Test_set_tmp= b(:);
    %Test_set_tmp   = reshape(TestSet{j},1, 100*100);
    Test_Set=[Test_Set;Test_set_tmp];
    end

% Perform first run of svm
SVMStruct = svmtrain(Training_Set, train_label, 'kernel_function', 'linear');
Group     = svmclassify(SVMStruct, Test_Set);

请引导我克服这一点。非常感谢。

我最近遇到了这个类似的问题,经过几个小时的检查,我发现了以下问题:

% we have 10 images and we divided it into two label groups here.
train_label               = zeros(size(10,1),1);
train_label(1:4,1)   = 1;         % 1 = naa
train_label(5:10,1)  = 2;         % 2 = ta

我只有499张图片,而相反,我将我的大小设置为500(意外删除1),因此导致了与上述完全相同的错误。你没有在这里提供你的数据集,所以也许你可以考虑再次检查。

相关内容

最新更新