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?
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] –