2017-01-19 17 views
1

Здравствуйте, Просто, чтобы познакомиться с CNN, я подготовил код для бинарной классификации Aircraft (760 изображений) или без самолетов (750).Ошибка в обучении CNN для двоичной классификации

Вот мой код MATLAB

Npos = numel(possitive_regions); 
Nneg = numel(negative_regions); 

Npos_train = floor(0.25* Npos); 
Npos_val = floor(0.25*Npos); 
Npos_test = floor(0.50*Npos); 

Nneg_train = floor(0.25*Nneg); 
Nneg_val = floor(0.25*Nneg); 
Nneg_test = floor(0.50*Nneg); 

for i=1:Npos 
    im= imresize (single(possitive_regions{i,:}),[50,50]); 
    imdb.images.data(:,:,:, i) = im; 
    imdb.images.labels(i) = 1; 

     if i <= Npos_train 
      imdb.images.set(i) = 1; 
     elseif i <= Npos_train+Npos_val 
      imdb.images.set(i) = 2; 
     else 
      imdb.images.set(i) = 3; 
     end 
end 

% for negative samples 
for i=1:Nneg 
    im= imresize (single(negative_regions{i,:}),[50,50]); 
    imdb.images.data(:,:,:, i+Npos) = im; 
    imdb.images.labels(i+Npos) = 0; 

     if i <= Nneg_train 
      imdb.images.set(Npos+i) = 1; 
     elseif i <= Nneg_train+Nneg_val 
       imdb.images.set(Npos+i) = 2; 
     else 
       imdb.images.set(Npos+i) = 3;      
     end 
end 
imdb.meta.sets = {'train', 'val', 'test'} ; 
%% Network 
opts.inputSize = [50 50 3] ; 
opts.train.batchSize = 50; 
opts.train.numEpochs = 10; 
opts.train.continue = true; 
% opts.train.useGpu = false; 
opts.train.learningRate = 0.01; 
% opts = vl_argparse(opts, []); 
f = 0.01; 

f=1/100 ; 
net.layers = {} ; 
net.layers{end+1} = struct('type', 'conv','weights', {{f*randn(5,5,3,20, 'single'), zeros(1, 20, 'single')}},'stride', 1,'pad', 0); 
net.layers{end+1} = struct('type', 'pool','method', 'max', 'pool', [2 2], 'stride', 2, 'pad', 0) ; 
net.layers{end+1} = struct('type', 'conv', 'weights', {{f*randn(5,5,20,50, 'single'),zeros(1,50,'single')}}, 'stride', 1, 'pad', 0) ; 
net.layers{end+1} = struct('type', 'pool', 'method', 'max', 'pool', [2 2], 'stride', 2, 'pad', 0) ; 
net.layers{end+1} = struct('type', 'conv', 'weights', {{f*randn(4,4,50,500, 'single'), zeros(1,500,'single')}}, 'stride', 1, 'pad', 0) ; 
net.layers{end+1} = struct('type', 'relu') ; 
net.layers{end+1} = struct('type', 'conv', 'weights', {{f*randn(1,1,500,10, 'single'), zeros(1,10,'single')}}, 'stride', 1, 'pad', 0) ; 
net.layers{end+1} = struct('type', 'softmaxloss') ; 
disp('Net is Ok.'); 
% [net, info] = trainfn(net, imdb, getBatch(opts), 'expDir', opts.expDir, net.meta.trainOpts, opts.train, 'val', find(imdb.images.set == 3)) ; 

[net, info] = cnn_train(net, imdb, @getBatch, opts.train, 'val', find(imdb.images.set == 2)) ; 

Сеть часть я взял из примера MINST. Я сохранил этот файл и функцию getBatch в папке примера MatConvNet. Когда я запускаю cnn_train, я получаю этот вывод и ошибку.

enter image description here Кто-нибудь, пожалуйста, помогите мне устранить эту ошибку. Кроме того, я искал эту ошибку, я обнаружил, что мне нужно проверить файлы mex, а также скомпилировать с помощью vl_compilenn ('verbose', 1). я получил ошибку при составлении, что:

Ошибка использования MEX

LINK: фатальным LNK1104 ошибка: не удается открыть файл «C: \ Users \ z5085693 \ Downloads \ matconvnet-1,0-beta23 \ matconvnet -1.0-beta23 \ matlab \ mex \ vl_nnconv.mexw64 '

Ошибка в vl_compilenn> mex_link (строка 547) mex (mopts {:});

Ошибка в vl_compilenn (строка 498) mex_link (opts, objs, mex_dir, flags.mexlink);

+0

какая ошибка вы получаете? – rpd

+0

, пожалуйста, проверьте сейчас – Addee

ответ

1

Проверьте свою сеть, потому что ваша сеть имеет 10 выходов, но вы хотите получить 2 выхода.

0

Этот тип сообщений «Попытка выполнить SCRIPT» имя «как функция» обычно решается путем запуска установки библиотеки. Перед запуском функции CNN-поезда попробуйте запустить функцию vl_setupnn.

 Смежные вопросы

  • Нет связанных вопросов^_^