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设置为零。 这层有什么用?
答案 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。