在Caffe卷积神经网络中初始化层

时间:2017-08-18 07:06:18

标签: deep-learning caffe conv-neural-network

我正在使用Caffe开展宪法神经网络。 我有一个带有“匈牙利语”图层的原型文件。该图层有两个额外的顶层box_confidencesbox_assignments

layer {
  name: "hungarian"
  type: "HungarianLoss"
  bottom: "bbox_concat"
  bottom: "boxes"
  bottom: "box_flags"
  top: "hungarian"
  top: "box_confidences"
  top: "box_assignments"
  loss_weight: 0.03
  hungarian_loss_param {
     match_ratio: 0.5
     permute_matches: true
  }
}

然后box_confidences在另一个图层box_loss中用作底部

layer{
  name: "box_loss"
  type: "SoftmaxWithLoss"
  bottom: "score_concat"
  bottom: "box_confidences"
  top: "box_loss"
}

我的疑问是

(1)我是否需要为这些box_confidencesbox_assignments设置图层?

(2)如有必要,如何在此原型文件中设置图层?该层只是保存blob数据,如何在HungarianLossLayer类成员函数中使用这两个层可以看作

void HungarianLossLayer<Dtype>::Forward_cpu(const vector<Blob<Dtype>*>& bottom, const vector<Blob<Dtype>*>& top){
    ...............
    ...............
    ...............
    Dtype* top_confidences = top[1]->mutable_cpu_data();
    ...............
    ...............
    ...............
    for (int i = 0; i < num_pred; ++i) {
        top_confidences[n * num_pred + i] =
          assignment[i] < num_gt_[n] ? Dtype(1) : Dtype(0);
        Dtype* top_assignments = top[2]->mutable_cpu_data();
        top_assignments[n * num_pred + i] =
          assignment[i] < num_gt_[n] ? assignment[i] : Dtype(-1);
    }
    ...............
    ...............

}

我只是将.....用于其他一些不易混乱的代码。

因此box_confidencesbox_assignments只是数据blob,大小为num_pred。如果不运行代码,我很难知道num_pred的价值。

在prototxt文件中设置这两个图层的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

box_confidencesbox_assignmentsHungarianLoss图层输出的要素图(或中间激活)。不需要手动设置此内存,您可以安全地将它们作为网络中后续层(如SoftmaxWithLoss)的底部blob提供