From 5babe0d4dea69ac5c435bacc1ae42b7f12505ff1 Mon Sep 17 00:00:00 2001 From: Jeff Donahue Date: Tue, 15 Apr 2014 22:46:45 -0700 Subject: [PATCH] add sigmoid cross ent layer unit tests --- include/caffe/vision_layers.hpp | 2 +- .../test_sigmoid_cross_entropy_loss_layer.cpp | 76 +++++++++++++++++++ 2 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 src/caffe/test/test_sigmoid_cross_entropy_loss_layer.cpp diff --git a/include/caffe/vision_layers.hpp b/include/caffe/vision_layers.hpp index 9052604c..b40f4c29 100644 --- a/include/caffe/vision_layers.hpp +++ b/include/caffe/vision_layers.hpp @@ -157,7 +157,7 @@ class SigmoidCrossEntropyLossLayer : public Layer { shared_ptr > sigmoid_layer_; // sigmoid_output stores the output of the sigmoid layer. shared_ptr > sigmoid_output_; - // Vector holders to call the underlying softmax layer forward and backward. + // Vector holders to call the underlying sigmoid layer forward and backward. vector*> sigmoid_bottom_vec_; vector*> sigmoid_top_vec_; }; diff --git a/src/caffe/test/test_sigmoid_cross_entropy_loss_layer.cpp b/src/caffe/test/test_sigmoid_cross_entropy_loss_layer.cpp new file mode 100644 index 00000000..fe899d43 --- /dev/null +++ b/src/caffe/test/test_sigmoid_cross_entropy_loss_layer.cpp @@ -0,0 +1,76 @@ +// Copyright 2014 BVLC and contributors. + +#include +#include +#include +#include + +#include "gtest/gtest.h" +#include "caffe/blob.hpp" +#include "caffe/common.hpp" +#include "caffe/filler.hpp" +#include "caffe/vision_layers.hpp" +#include "caffe/test/test_gradient_check_util.hpp" + +#include "caffe/test/test_caffe_main.hpp" + +namespace caffe { + +extern cudaDeviceProp CAFFE_TEST_CUDA_PROP; + +template +class SigmoidCrossEntropyLossLayerTest : public ::testing::Test { + protected: + SigmoidCrossEntropyLossLayerTest() + : blob_bottom_data_(new Blob(10, 5, 1, 1)), + blob_bottom_targets_(new Blob(10, 5, 1, 1)) { + // Fill the data vector + FillerParameter data_filler_param; + data_filler_param.set_std(10); + GaussianFiller data_filler(data_filler_param); + data_filler.Fill(blob_bottom_data_); + blob_bottom_vec_.push_back(blob_bottom_data_); + // Fill the targets vector + FillerParameter targets_filler_param; + targets_filler_param.set_min(0.0); + targets_filler_param.set_max(1.0); + UniformFiller targets_filler(targets_filler_param); + targets_filler.Fill(blob_bottom_targets_); + blob_bottom_vec_.push_back(blob_bottom_targets_); + } + virtual ~SigmoidCrossEntropyLossLayerTest() { + delete blob_bottom_data_; + delete blob_bottom_targets_; + } + Blob* const blob_bottom_data_; + Blob* const blob_bottom_targets_; + vector*> blob_bottom_vec_; + vector*> blob_top_vec_; +}; + +typedef ::testing::Types Dtypes; +TYPED_TEST_CASE(SigmoidCrossEntropyLossLayerTest, Dtypes); + + +TYPED_TEST(SigmoidCrossEntropyLossLayerTest, TestGradientCPU) { + LayerParameter layer_param; + Caffe::set_mode(Caffe::CPU); + SigmoidCrossEntropyLossLayer layer(layer_param); + layer.SetUp(this->blob_bottom_vec_, &this->blob_top_vec_); + GradientChecker checker(1e-2, 1e-2, 1701); + checker.CheckGradientSingle(&layer, &(this->blob_bottom_vec_), + &(this->blob_top_vec_), 0, -1, -1); +} + +TYPED_TEST(SigmoidCrossEntropyLossLayerTest, TestGradientGPU) { + LayerParameter layer_param; + Caffe::set_mode(Caffe::GPU); + SigmoidCrossEntropyLossLayer layer(layer_param); + layer.SetUp(this->blob_bottom_vec_, &this->blob_top_vec_); + GradientChecker checker(1e-2, 1e-2, 1701); + checker.CheckGradientSingle(&layer, &(this->blob_bottom_vec_), + &(this->blob_top_vec_), 0, -1, -1); +} + + +} // namespace caffe -- 2.34.1