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。