2017-01-18 11 views
0

Я начал использовать CNN в MatConvNet с базовой двоичной классификацией. У меня есть 90 изображений, в которых есть всего 750 самолетов и наземных коробок истины. Используя наземные ящики, я извлек все патчи изображения самолета как положительные образцы и сделаю переменные для ввода. вот MATLAB КОД:CNN для двоичной классификации с использованием MatConvNet

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

imdb.images.set =[ ones(1, Npos_train) 2*ones(1, Npos_val) 3*ones(1, Npos_test)]; 
for i=1:Npos 
     im= imresize (double(p_regions{i,:}),[50,50]); 
    imdb.images.data(:,:,:, i) = im; 
    imdb.images.labels(i) = 1; 
end 
imdb.meta.sets = {'train', 'val', 'test'} ; 

В случае, если я совмещаю самолет (положительный) и НЕАВИАЦИОННЫЕ заплатки (отрицательные) изображений, то код будет выглядеть следующим образом?

Npos_train = floor(0.25* (Npos+Nneg)); 
Npos_val = floor(0.25*(Npos+Nneg)); 
Npos_test = floor(0.50*(Npos+Nneg)); 
for i=1:Npos 
      im= imresize (double(p_regions{i,:}),[50,50]); 
     imdb.images.data(:,:,:, i) = im; 
     imdb.images.labels(i) = 1; 
    end 
for i=1:Nneg 
      im= imresize (double(n_regions{i,:}),[50,50]); 
     imdb.images.data(:,:,:, I+Npos) = im; 
     imdb.images.labels(I+Npos) = 0; 
    end 
imdb.images.set =[ ones(1, Npos_train) 2*ones(1, Npos_val) 3*ones(1, Npos_test)]; 

images.data будет как [Все Положительных Все негативов]

images.labels организует данные [все 1 все 0]
и images.set будет images.set = [те (1, Npos_train) 2 * ones (1, Npos_val) 3 * ones (1, Npos_test)];

В: Что меня путает: если мы хотим 200 образцов для обучения. Затем, как CNN автоматически будет принимать положительные и отрицательные образцы, если данные хранятся как в images.data и images.labels?

ответ

1

Вы должны проверить это самостоятельно. Возьмите образцы ваших данных и постройте изображение при печати соответствующей метки.

Даже если я скажу вам, если этот код верен, чего я не могу, кстати, потому что у меня нет доступа к набору данных, и я не могу попробовать ваш код. Однако вам все равно придется проверять ваши данные, чтобы убедиться, что вы учитесь правильно. Поэтому я бы посоветовал вам подтвердить это самостоятельно. Это поможет вам улучшить свои глубокие навыки обучения.

Edit:

Тот же индекс для массива данных соответствует одному и тому же индексу в массиве меток. Поэтому, если метка равна 0 для одного самолета, она знает, что она ложна, и если она не знает, что это правда.

Сеть фактически не знает, какая метка соответствует какому действию, она просто учится различать два класса. Я предлагаю проработать учебник mathconvnet (например, этот: http://www.robots.ox.ac.uk/~vgg/practicals/cnn/index.html), чтобы понять эти понятия.

+0

Отредактировал свой ответ. –