From f2452d8966823bcb993ce64e6045f544d96c3ace Mon Sep 17 00:00:00 2001 From: Sergio Date: Fri, 20 Jun 2014 18:26:05 -0700 Subject: [PATCH] Merge HingeLoss and L2HingeLoss by adding hinge_norm to params 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 | 10 ++++++++++ src/caffe/test/test_hinge_loss_layer.cpp | 24 ++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/src/caffe/proto/caffe.proto b/src/caffe/proto/caffe.proto index b85b49c..f1e82f1 100644 --- a/src/caffe/proto/caffe.proto +++ b/src/caffe/proto/caffe.proto @@ -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. diff --git a/src/caffe/test/test_hinge_loss_layer.cpp b/src/caffe/test/test_hinge_loss_layer.cpp index 1725827..e862e1e 100644 --- a/src/caffe/test/test_hinge_loss_layer.cpp +++ b/src/caffe/test/test_hinge_loss_layer.cpp @@ -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 layer(layer_param); + layer.SetUp(this->blob_bottom_vec_, &this->blob_top_vec_); + GradientChecker 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 layer(layer_param); + layer.SetUp(this->blob_bottom_vec_, &this->blob_top_vec_); + GradientChecker 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 -- 2.7.4