解释caffe中的静默层

Explain silence layer in 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());
    }
  }
}

它只是将差异设置为零。 这个图层有什么用?

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

例如,假设我们正在使用 AlexNet,并且我们将 'fc7' 层的底部更改为 'pool5' 而不是 'fc6'。如果我们不删除 'fc6' blob 声明,则不再使用该层,但它的输出将打印在 stderr 中:它被视为整个体系结构的输出。如果出于某些原因我们想保留 'fc6',但不显示其值,我们可以使用 'SilenceLayer'.

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

另见 caffe.help