解释caffe中的沉默层

时间:2017-02-11 06:06:52

标签: caffe

void SilenceLayer<Dtype>::Backward_cpu(const vector<Blob<Dtype>*>& top,
      const vector<bool>& propagate_down, const vector<Blob<Dtype>*>& bottom) {
  for (int i = 0; i < bottom.size(); ++i) {
    if (propagate_down[i]) {
      caffe_set(bottom[i]->count(), Dtype(0),
                bottom[i]->mutable_cpu_diff());
    }
  }
}

它只是将diff设置为零。 这层有什么用?

1 个答案:

答案 0 :(得分:4)

使用此层只是为了避免在日志中报告未使用的blob的输出。作为输出管理器层,它的梯度显然为零。

例如,让我们假设我们正在使用AlexNet并且我们更改了&#39; fc7&#39;层到&#39; pool5&#39;而不是&#39; fc6&#39;。如果我们不删除&#39; fc6&#39; blob声明,此图层不再使用,但其输出将以stderr打印:它被视为整个架构的输出。如果我们想要保持&#39; fc6&#39;由于某些原因,但没有显示其值,我们可以使用&#39; SilenceLayer&#39;。

http://caffe.berkeleyvision.org/tutorial/layers/silence.html

另见caffe.help