Merge HingeLoss and L2HingeLoss by adding hinge_norm to params
authorSergio <sguada@gmail.com>
Sat, 21 Jun 2014 01:26:05 +0000 (18:26 -0700)
committerSergio <sguada@gmail.com>
Sat, 21 Jun 2014 01:26:05 +0000 (18:26 -0700)
Conflicts:
src/caffe/layers/loss_layer.cpp
src/caffe/proto/caffe.proto
src/caffe/test/test_l2_hinge_loss_layer.cpp

src/caffe/proto/caffe.proto
src/caffe/test/test_hinge_loss_layer.cpp

index b85b49c..f1e82f1 100644 (file)
@@ -194,6 +194,7 @@ message LayerParameter {
   optional PowerParameter power_param = 21;
   optional WindowDataParameter window_data_param = 20;
   optional ThresholdParameter threshold_param = 25;
+  optional HingeLossParameter hinge_loss_param = 29;
 
   // DEPRECATED: The layer parameters specified as a V0LayerParameter.
   // This should never be used by any code except to upgrade to the new
@@ -305,6 +306,15 @@ message HDF5OutputParameter {
   optional string file_name = 1;
 }
 
+message HingeLossParameter {
+  enum Norm {
+    L1 = 0;
+    L2 = 1;    
+  }
+  // Specify the Norm to use L1 or L2
+  optional Norm hinge_norm = 1 [default = L1];
+}
+
 // Message that stores parameters used by ImageDataLayer
 message ImageDataParameter {
   // Specify the data source.
index 1725827..e862e1e 100644 (file)
@@ -70,4 +70,28 @@ TYPED_TEST(HingeLossLayerTest, TestGradientGPU) {
       &(this->blob_top_vec_), 0, -1, -1);
 }
 
+
+TYPED_TEST(HingeLossLayerTest, TestGradientCPUL2) {
+  LayerParameter layer_param;
+  HingeLossParameter* hinge_loss_param = layer_param.mutable_hinge_loss_param();
+  hinge_loss_param->set_hinge_norm(HingeLossParameter_Norm_L2);
+  Caffe::set_mode(Caffe::CPU);
+  HingeLossLayer<TypeParam> layer(layer_param);
+  layer.SetUp(this->blob_bottom_vec_, &this->blob_top_vec_);
+  GradientChecker<TypeParam> checker(1e-2, 2e-3, 1701, 1, 0.01);
+  checker.CheckGradientSingle(&layer, &(this->blob_bottom_vec_),
+      &(this->blob_top_vec_), 0, -1, -1);
+}
+
+TYPED_TEST(HingeLossLayerTest, TestGradientGPUL2) {
+  LayerParameter layer_param;
+  HingeLossParameter* hinge_loss_param = layer_param.mutable_hinge_loss_param();
+  hinge_loss_param->set_hinge_norm(HingeLossParameter_Norm_L2);
+  Caffe::set_mode(Caffe::GPU);
+  HingeLossLayer<TypeParam> layer(layer_param);
+  layer.SetUp(this->blob_bottom_vec_, &this->blob_top_vec_);
+  GradientChecker<TypeParam> checker(1e-2, 2e-3, 1701, 1, 0.01);
+  checker.CheckGradientSingle(&layer, &(this->blob_bottom_vec_),
+      &(this->blob_top_vec_), 0, -1, -1);
+}
 }  // namespace caffe