0

Ich habe einen Datensatz mit jedem Bild mit etwa 101 Etiketten. Ich weiß, ich muss die HDF5-Datenschicht verwenden, um meine Daten in das Netzwerk einzubringen. Aber das Problem ist, dass ich eine Multi-Task-Einrichtung habe. Mein Netzwerk hat Parameter für die ersten 5 Ebenen geteilt und verzweigt sich dann. Von 101 Etiketten möchte ich 100 Etiketten an eine Aufgabe und 1 Etikett an die zweite Aufgabe senden.Wie werden Multi-Label-Daten als HDF5-Eingang in einem Multi-Task-Setup eingegeben?

Nun, wie mache ich das? Kann ich irgendwie Folgendes tun:

layer { 
     name: "data" 
     type: "HDF5Data" 
     top: "data" 
     top: "label1"   ############# A scalar label 
     top : "label2"   ######## A vector of size 100 
     include { 
     phase: TRAIN 
     } 
     hdf5_data_param { 
     source: "path/to/the/text/file/test.txt" 
     batch_size: 10 
     } 
} 

Es gibt zwei obere Blobs in der obigen Einrichtung. Eine für den 100-dimensionalen Vektor (label2) und die andere für die verbleibende Markierung (label1).
IST DIESE ART EINES SETUP MÖGLICH?

Ich habe auch irgendwo gelesen, dass man den multidimensionalen Vektor teilen kann, der die Aufspaltungsspezifikationen in der Prototxtdatei selbst spezifiziert. In diesem Fall müsste ich einen einzelnen oberen Blob für die Markierung (101 dimensional) verwenden und dann den 101-d-Vektor in zwei Vektoren von 100-d und 1-d (Skalar) teilen. Wie kann das gemacht werden?
Die Schicht, in diesem Fall würde:

layer { 
     name: "data" 
     type: "HDF5Data" 
     top: "data" 
     top : "label"   ######## A vector of size 101 
     include { 
     phase: TRAIN 
     } 
     hdf5_data_param { 
     source: "path/to/the/text/file/test.txt" 
     batch_size: 10 
     } 
} 
## Some layer to split the label blob into two vectors of 100-d and 1-d respectively 

Jede Idee, wie diese Spaltung arbeiten kann?

+1

Ja, es ist möglich. Schau dir das mal an: http://stackoverflow.com/questions/33140000/how-to-feed-caffe-multi-label-data-in-hdf5-format[1] –

Antwort

2
  1. Die ursprünglichen Einstellungen ("HDF5Data" Schichten mit drei top s) vorgeschlagen ist möglich und vollkommen in Ordnung in caffe. Tatsächlich unterstützt caffe jeden gerichteten a-zyklischen Datenfluss in dem durch das Netz gebildeten Graphen. Sie können mehrere bottom s und mehrere Verlustschichten haben. Es ist in Ordnung.

  2. Wenn Sie darauf bestehen, einen einzigen label Eingang von 101 Dimensionen auf, die, Sie es "Slice" Schicht mit aufspalten

    layer { 
        type: "Slice" 
        name: "slice/label" 
        bottom: "label" # assuming shape batch_size-101-1-1 
        top: "label1" # first 1D label 
        top: "label2" # second 100D label 
        slice_param { 
        axis: 1 # along "channels" dimension 
        slice_point: 1 # slice after the first element 
        } 
    } 
    

    Weitere Informationen über die "Slice" Schicht params, können Sie caffe.proto sehen.

+0

Danke !! Beide Ansätze funktionieren gut in Caffe. –

+0

@Shai Ich habe eine Frage mit etwas verwandten, auf der Vorverarbeitung von HDF5-Daten, können Sie sich damit befassen? https://stackoverflow.com/questions/47799416/hdf5data-processing-with-caffes-transformer-for-training Danke – dusa