make solver able to compute and display test loss
authorJeff Donahue <jeff.donahue@gmail.com>
Tue, 15 Apr 2014 22:38:57 +0000 (15:38 -0700)
committerJeff Donahue <jeff.donahue@gmail.com>
Tue, 15 Apr 2014 22:38:57 +0000 (15:38 -0700)
examples/mnist/mnist_autoencoder_solver.prototxt
examples/mnist/mnist_autoencoder_test.prototxt
src/caffe/proto/caffe.proto
src/caffe/solver.cpp

index b11b2c4..dd4f0fe 100644 (file)
@@ -2,6 +2,7 @@ train_net: "mnist_autoencoder_train.prototxt"
 test_net: "mnist_autoencoder_test.prototxt"
 test_iter: 50
 test_interval: 100
+test_compute_loss: true
 base_lr: 0.0001
 lr_policy: "fixed"
 display: 20
index c106b47..5090e82 100644 (file)
@@ -20,10 +20,6 @@ layers {
   top: "encode1"
   name: "encode1"
   type: INNER_PRODUCT
-  blobs_lr: 1
-  blobs_lr: 1
-  weight_decay: 1
-  weight_decay: 0
   inner_product_param {
     num_output: 1000
   }
@@ -39,10 +35,6 @@ layers {
   top: "encode2"
   name: "encode2"
   type: INNER_PRODUCT
-  blobs_lr: 1
-  blobs_lr: 1
-  weight_decay: 1
-  weight_decay: 0
   inner_product_param {
     num_output: 500
   }
@@ -58,10 +50,6 @@ layers {
   top: "encode3"
   name: "encode3"
   type: INNER_PRODUCT
-  blobs_lr: 1
-  blobs_lr: 1
-  weight_decay: 1
-  weight_decay: 0
   inner_product_param {
     num_output: 250
   }
@@ -109,10 +97,6 @@ layers {
   top: "decode3"
   name: "decode3"
   type: INNER_PRODUCT
-  blobs_lr: 1
-  blobs_lr: 1
-  weight_decay: 1
-  weight_decay: 0
   inner_product_param {
     num_output: 500
   }
@@ -128,10 +112,6 @@ layers {
   top: "decode2"
   name: "decode2"
   type: INNER_PRODUCT
-  blobs_lr: 1
-  blobs_lr: 1
-  weight_decay: 1
-  weight_decay: 0
   inner_product_param {
     num_output: 1000
   }
index 19953bf..8073c28 100644 (file)
@@ -63,6 +63,7 @@ message SolverParameter {
   optional int32 test_iter = 3 [default = 0];
   // The number of iterations between two testing phases.
   optional int32 test_interval = 4 [default = 0];
+  optional bool test_compute_loss = 19 [default = false];
   optional float base_lr = 5; // The base learning rate
   // the number of iterations between displaying info. If display = 0, no info
   // will be displayed.
index ef5123c..8daedf4 100644 (file)
@@ -100,9 +100,14 @@ void Solver<Dtype>::Test() {
   CHECK_NOTNULL(test_net_.get())->CopyTrainedLayersFrom(net_param);
   vector<Dtype> test_score;
   vector<Blob<Dtype>*> bottom_vec;
+  Dtype loss = 0;
   for (int i = 0; i < param_.test_iter(); ++i) {
+    Dtype iter_loss;
     const vector<Blob<Dtype>*>& result =
-        test_net_->Forward(bottom_vec);
+        test_net_->Forward(bottom_vec, &iter_loss);
+    if (param_.test_compute_loss()) {
+      loss += iter_loss;
+    }
     if (i == 0) {
       for (int j = 0; j < result.size(); ++j) {
         const Dtype* result_vec = result[j]->cpu_data();
@@ -120,6 +125,10 @@ void Solver<Dtype>::Test() {
       }
     }
   }
+  if (param_.test_compute_loss()) {
+    loss /= param_.test_iter();
+    LOG(INFO) << "Test loss: " << loss;
+  }
   for (int i = 0; i < test_score.size(); ++i) {
     LOG(INFO) << "Test score #" << i << ": "
         << test_score[i] / param_.test_iter();