debug_info: print param (and gradient) stats for whole Net after Backward
authorJeff Donahue <jeff.donahue@gmail.com>
Tue, 7 Oct 2014 06:46:05 +0000 (23:46 -0700)
committerJeff Donahue <jeff.donahue@gmail.com>
Fri, 30 Jan 2015 03:07:49 +0000 (19:07 -0800)
src/caffe/net.cpp

index 692351f..e827a06 100644 (file)
@@ -705,6 +705,21 @@ void Net<Dtype>::BackwardTo(int end) {
 template <typename Dtype>
 void Net<Dtype>::Backward() {
   BackwardFromTo(layers_.size() - 1, 0);
+  if (debug_info_) {
+    Dtype asum_data = 0, asum_diff = 0, sumsq_data = 0, sumsq_diff = 0;
+    for (int i = 0; i < params_.size(); ++i) {
+      if (param_owners_[i] >= 0) { continue; }
+      asum_data += params_[i]->asum_data();
+      asum_diff += params_[i]->asum_diff();
+      sumsq_data += params_[i]->sumsq_data();
+      sumsq_diff += params_[i]->sumsq_diff();
+    }
+    const Dtype l2norm_data = std::sqrt(sumsq_data);
+    const Dtype l2norm_diff = std::sqrt(sumsq_diff);
+    LOG(ERROR) << "    [Backward] All net params (data, diff): "
+        << "L1 norm = (" << asum_data << ", " << asum_diff << "); "
+        << "L2 norm = (" << l2norm_data << ", " << l2norm_diff << ")";
+  }
 }
 
 template <typename Dtype>