2017-01-18 5 views
0

Ich habe angefangen, CNN in MatConvNet mit grundlegenden binären Klassifizierung zu verwenden. Ich habe 90 Bilder darin, dass es insgesamt 750 Flugzeuge und Bodenwahrheitskästen gibt. Unter Verwendung von Bodenkästen habe ich alle Flugzeugbildflecken als positive Proben extrahiert und die Variablen für die Eingabe erstellt. hier ist der MATLAB-Code:CNN für binäre Klassifizierung mit 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'} ; 

Im Fall, wenn ich Flugzeuge verbinden (positiv) und nicht-Flugzeugen (negativ) Bild Patches dann Code so sein?

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 wird wie [Alle Positiv Alle Negatives]

images.labels werden die Daten [Alle 1 All 0'en]
und images.set organisieren werden images.set = [Einsen (1, Npos_train) 2 * Einsen (1, Npos_val) 3 * Einsen (1, Npos_test)];

Q: Die Sache, die mich hier verwirrt, ist: , wenn wir 200 Proben für das Training wollen. Dann, wie CNN wird automatisch positive und negative Proben, wenn die Daten wie in images.data und images.labels gespeichert werden?

Antwort

1

Sie sollten dies selbst überprüfen. Nehmen Sie Proben Ihrer Daten und zeichnen Sie das Bild während des Druckens des entsprechenden Etiketts.

Auch wenn ich dir jetzt sage, ob dieser Code korrekt ist, was ich übrigens nicht kann, da ich keinen Zugriff auf den Datensatz habe und ich deinen Code nicht ausprobieren kann. Allerdings müssen Sie in der Lage sein, Ihre Daten auf dem Weg zu validieren, um sicherzustellen, dass Sie das Richtige lernen. Daher würde ich Ihnen raten, dies selbst zu überprüfen. Es wird Ihnen helfen, Ihre tiefen Lernfähigkeiten zu verbessern.

Edit:

der gleiche Index für das Datenfeld entspricht den gleichen Index in dem Etiketten-Array. Wenn also das Label für ein Flugzeug 0 ist, weiß es, dass es falsch ist und wenn nicht, weiß es, dass es wahr ist.

Das Netzwerk weiß eigentlich nicht, welches Label zu welcher Aktion gehört, es lernt nur, zwischen den beiden Klassen zu unterscheiden. Ich schlage vor, durch das Tutorial von mathconvnet (wie dieses: http://www.robots.ox.ac.uk/~vgg/practicals/cnn/index.html) zu arbeiten, um diese Konzepte zu verstehen.

+0

Redigiert meine Antwort. –

Verwandte Themen