Ich verwendete caffe für mein maschinelles Lernen in C++
.Wie kann man die Blob-Informationen von Layern in Caffe extrahieren?
Nachdem ich durch das Netzwerk als net_->Forward();
gegangen bin, möchte ich einzelne Schicht Informationen extrahieren.
Was ich war
net_->Forward();
//Extract layer information
cout << "Num layers:" << "'" << net_->layer_names().size() << "'"<< endl;
for (int layer_index = 0; layer_index < net_->layer_names().size(); ++layer_index)
{
// get that layer blob and its dimension
const boost::shared_ptr<Blob<float> > blob = net_->blob_by_name(net_->blob_names()[layer_index]);
int batch_size = blob->num();
int dim_features = blob->count()/batch_size;
std::cout << "Layer name:" << "'" << net_->layer_names()[layer_index] << "'" << " Blob name:" << "'" <<net_->blob_names()[layer_index] << "'" << " batch size " << "'" << batch_size << "'" << " dim_features:" << "'" << dim_features << "'" << std::endl;
}
habe ich alle Ebenennamen und Dimensionen sehen.
Layer name'image' Blob name'image' batch_size'1' dim_features'921600'
Layer name'conv1/7x7_s2' Blob name'conv1/7x7_s2' batch_size'1' dim_features'4915200'
Layer name'conv1/relu_7x7' Blob name'pool1/3x3_s2' batch_size'1' dim_features'1228800'
Layer name'pool1/3x3_s2' Blob name'pool1/norm1' batch_size'1' dim_features'1228800'
Layer name'pool1/norm1' Blob name'conv2/3x3_reduce' batch_size'1' dim_features'1228800'
Layer name'conv2/3x3_reduce' Blob name'conv2/3x3' batch_size'1' dim_features'3686400'
Layer name'conv2/relu_3x3_reduce' Blob name'conv2/norm2' batch_size'1' dim_features'3686400'
Aber hier brauche ich noch mehr eingehende Informationen.
Aktuelle Dimension 921600 ist, dass die Chargengröße x Kanäle x Höhe x Breite zusammengesetzt ist, = 921600.
(1) Meine erste Frage ist, wie die Informationen zu teilen?
(2) Angenommen, ich diese Informationen Chargengröße x Kanäle x Höhe x Breite = 1 x 3 x 480 x 640. Dann
wie jede Schicht in Blob zu extrahieren, wie 1 x 1 x 480 x 640, damit ich drucken oder plotten kann.
Dergleichen ich wie
in Python tunfor layer_name, blob in net.blobs.iteritems():
print layer_name + '\t' + str(blob.data.shape)
mydata = net.blobs[layer_name].data[0,0,:,:]
#cv2.imshow("mydata",mydata);
#cv2.waitKey(1)
layer_name = layer_name.replace('/', '_')
np.savetxt("printdata/"+layer_name+".csv", mydata, delimiter=",")
Aber jetzt, wie ich in C++
zu tun.
I tat das gleiche. Aber ich bekomme ein schwarzes Bild wie ich es gemacht habe als cv :: Mat a (blob-> height(), blob-> width(), CV_32FC1, blob-> data_at (0,1,0,0)); Etwas stimmt nicht? – batuman
Ich verstehe die Frage hier nicht. Ich dachte, du wolltest nur die Dimensionsinformationen des Blobs. Möchten Sie das Bild aus dem Blob zeigen? – lnman
Y in meiner zweiten Frage – batuman