Added test to Dropout to check gradients during Test phase
authorSergio <sguada@gmail.com>
Sat, 14 Jun 2014 15:39:35 +0000 (08:39 -0700)
committerSergio <sguada@gmail.com>
Sat, 28 Jun 2014 01:54:21 +0000 (18:54 -0700)
src/caffe/layers/dropout_layer.cu
src/caffe/test/test_neuron_layer.cpp

index 2e0b0d3..225e091 100644 (file)
@@ -66,7 +66,8 @@ void DropoutLayer<Dtype>::Backward_gpu(const vector<Blob<Dtype>*>& top,
           static_cast<const unsigned int*>(rand_vec_->gpu_data());
       const int count = (*bottom)[0]->count();
       // NOLINT_NEXT_LINE(whitespace/operators)
-      DropoutBackward<Dtype><<<CAFFE_GET_BLOCKS(count), CAFFE_CUDA_NUM_THREADS>>>(
+      DropoutBackward<Dtype><<<CAFFE_GET_BLOCKS(count),
+        CAFFE_CUDA_NUM_THREADS>>>(
           count, top_diff, mask, uint_thres_, scale_, bottom_diff);
       CUDA_POST_KERNEL_CHECK;
     } else {
index ca70e1a..c7c0dc1 100644 (file)
@@ -178,6 +178,15 @@ TYPED_TEST(NeuronLayerTest, TestDropoutGradientCPU) {
       &(this->blob_top_vec_));
 }
 
+TYPED_TEST(NeuronLayerTest, TestDropoutGradientCPUTest) {
+  LayerParameter layer_param;
+  Caffe::set_mode(Caffe::CPU);
+  Caffe::set_phase(Caffe::TEST);
+  DropoutLayer<TypeParam> layer(layer_param);
+  GradientChecker<TypeParam> checker(1e-2, 1e-3);
+  checker.CheckGradientEltwise(&layer, &(this->blob_bottom_vec_),
+      &(this->blob_top_vec_));
+}
 
 TYPED_TEST(NeuronLayerTest, TestDropoutCPUTestPhase) {
   LayerParameter layer_param;
@@ -232,6 +241,22 @@ TYPED_TEST(NeuronLayerTest, TestDropoutGradientGPU) {
   }
 }
 
+TYPED_TEST(NeuronLayerTest, TestDropoutGradientGPUTest) {
+  if (CAFFE_TEST_CUDA_PROP.major >= 2) {
+    LayerParameter layer_param;
+    Caffe::set_mode(Caffe::GPU);
+    Caffe::set_phase(Caffe::TEST);
+    DropoutLayer<TypeParam> layer(layer_param);
+    GradientChecker<TypeParam> checker(1e-2, 1e-3);
+    // it is too expensive to call curand multiple times, so we don't do an
+    // exhaustive gradient check.
+    checker.CheckGradient(&layer, &(this->blob_bottom_vec_),
+        &(this->blob_top_vec_));
+  } else {
+    LOG(ERROR) << "Skipping test to spare my laptop.";
+  }
+}
+
 
 TYPED_TEST(NeuronLayerTest, TestDropoutGPUTestPhase) {
   LayerParameter layer_param;