根据Shai的建议,我所做的就是跟随内部 ForwardDebugInfo() 。
ForwardDebugInfo()
for (int top_id = 0; top_id < top_vecs_[layer_id].size(); ++top_id) { Blob<Dtype>& blob = *top_vecs_[layer_id][top_id]; const string& blob_name = blob_names_[top_id_vecs_[layer_id][top_id]]; string name = blob_name; for (int i = 0; i < name.length(); ++i) { if (name[i] == '/') name[i] = '_'; } string foldname = "images/"+name; if (stat(foldname.c_str(), &st) == -1) { mkdir(foldname.c_str(), 0700); } //cout<<"blob_name " << blob_name << " layer_id is " << layer_id << " blob.num() " << blob.num() << " blob.channels() " << blob.channels() << " blob.height() " << blob.height() << " blob.width() " << blob.width() << endl; ///////Plotting output of individual layer if(blob.height()>1 && blob.width()>1){ cv::Size ss(blob.width(), blob.height()); Dtype* data = blob.mutable_cpu_data(); for(int k=0; k < blob.channels(); k++) { cv::Mat channel(ss, CV_32FC1, data); stringstream s; s << k; cv::imwrite(foldname+"/"+s.str()+".jpg",channel*255.0); channel.release(); data += ss.area(); } } // mainImg.release(); ///////////////////////////////////////// const Dtype data_abs_val_mean = blob.asum_data() / blob.count(); LOG_IF(INFO, Caffe::root_solver()) << " [Forward] " << "Layer " << layer_names_[layer_id] << ", top blob " << blob_name << " data: " << data_abs_val_mean; }