解释caffe中的静音层

cur*_*729 3 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());
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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

小智 5

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

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

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

另请参阅caffe.help