如何使用带有c ++程序的caffe框架知道图层中是否存在Bias

时间:2017-10-30 12:14:00

标签: c++ neural-network deep-learning caffe bias-neuron

我试图用c ++读取caffe框架中的权重和偏见。这是我的代码

shared_ptr<Blob<float> >& weight = current_layer->blobs()[0];//for weights
shared_ptr<Blob<float> >& bias = current_layer->blobs()[1];//for bias

但是,对于某些模型,偏差不存在或通过分段错误错误定义。

那么哪个函数返回一个布尔值,表示偏见的预测以及如何在c ++中调用该函数?

2 个答案:

答案 0 :(得分:1)

blobs返回的current_layer->blobs()存储在std::vector中,您可以使用其size属性:

if (current_layer->blobs().size() > 1) {
    shared_ptr<Blob<float> >& bias = current_layer->blobs()[1];//for bias
}

有关更多详细信息,请参阅this similar answer了解python接口。

答案 1 :(得分:1)

const std::vector<string> lnames = net_->layer_names();

for (int layer_index = 0; layer_index < net_->layer_names().size(); ++layer_index)
{
     const shared_ptr<Layer<float> > CAlayer = net_->layer_by_name(lnames[layer_index]);
     std::cout << lnames[layer_index] << std::endl;

     if(CAlayer->blobs().size() > 1)
     {
             std::cout << "weight-shape" << CAlayer->blobs()[0]->shape_string() << std::endl;
             std::cout << "weight-count" << CAlayer->blobs()[0]->count() << std::endl;
             std::cout << "bias-shape" << CAlayer->blobs()[1]->shape_string() << std::endl;
             std::cout << "bias-count" << CAlayer->blobs()[1]->count() << std::endl;
     }
}

最终可以从中获取数据(权重和偏差参数)

 CAlayer->blobs()[0]->cpu_data()[...]