2017-04-24 1 views
1

ich ein Etikett von 353 Länge memorydata Schicht in caffe definieren wollen, sondern einfach den Namen hinzufügen, der es nicht der Fall ist, weil die Standardlänge davon 1 (batch_size ist * 1).wie Label Dimension in memorydata Schicht in caffe definieren

layer { 
    name: "data" 
    type: "MemoryData" 
    top: "data" 
    top: "label" 
    include { 
    phase: TRAIN 
    } 
    memory_data_param { 
    batch_size: 60 
    channels: 3 
    height: 224 
    width: 224 
    } 
} 

Wie kann ich dieses Problem beheben?

Antwort

1

standardmäßig, wenn Sie toghether Daten gesetzt und Etiketten in einer einzigen Speicherschicht nimmt caffe dass die Markierung eine einzelne ganze Zahl Wert (für Einzellabel-Klassifizierungsbeispielsweise verwendet werden).

Wenn benötigen Sie das Etikett ein Array sein, dann sollten Sie Etiketten als eine andere Datenschicht liefern:

layer { 
    name: "data" 
    type: "MemoryData" 
    top: "data" 
    top: "useless1" 
    include { 
     phase: TRAIN 
    } 
    memory_data_param { 
     batch_size: 60 
     channels: 3 
     height: 224 
     width: 224 
    } 
} 

layer { 
    name: "label" 
    type: "MemoryData" 
    top: "label" 
    top: "useless2" 
    include { 
     phase: TRAIN 
    } 
    memory_data_param { 
     batch_size: 60 
     channels: 1 
     height: 1 
     width: 353 
    } 
} 

Und dann in Python-Skript füllen beiden Vektoren vor jedem Trainingsschritt:

numpy.copyto(net.blobs['data'].data, yourdata) #Put here your 60x3x224x224 data array 
numpy.copyto(net.blobs['label'].data, yourlabels) #Put here your 60x1x1x353 label array 
solver.step(1) 
Verwandte Themen