解释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。
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。