92a50a5959df1a3b2b38008399aff2756237a510
1 #include <cstring>
2 #include <cuda_runtime.h>
4 #include "gtest/gtest.h"
5 #include "caffeine/blob.hpp"
6 #include "caffeine/common.hpp"
7 #include "caffeine/filler.hpp"
8 #include "caffeine/vision_layers.hpp"
10 namespace caffeine {
12 template <typename Dtype>
13 class NeuronLayerTest : public ::testing::Test {
14 protected:
15 NeuronLayerTest()
16 : blob_bottom_(new Blob<Dtype>(2, 3, 4, 5)),
17 blob_top_(new Blob<Dtype>(2, 3, 4, 5)) {
18 // fill the values
19 FillerParameter filler_param;
20 GaussianFiller<Dtype> filler(filler_param);
21 filler.Fill(this->blob_bottom_);
22 blob_bottom_vec_.push_back(blob_bottom_);
23 blob_top_vec_.push_back(blob_top_);
24 };
25 virtual ~NeuronLayerTest() { delete blob_bottom_; delete blob_top_; }
26 Blob<Dtype>* const blob_bottom_;
27 Blob<Dtype>* const blob_top_;
28 vector<Blob<Dtype>*> blob_bottom_vec_;
29 vector<Blob<Dtype>*> blob_top_vec_;
30 };
32 typedef ::testing::Types<float, double> Dtypes;
33 TYPED_TEST_CASE(NeuronLayerTest, Dtypes);
35 TYPED_TEST(NeuronLayerTest, TestReLUCPU) {
36 LayerParameter layer_param;
37 Caffeine::set_mode(Caffeine::CPU);
38 ReLULayer<TypeParam> layer(layer_param);
39 layer.Forward(this->blob_bottom_vec_, &(this->blob_top_vec_));
40 // Now, check values
41 const TypeParam* bottom_data = this->blob_bottom_->cpu_data();
42 const TypeParam* top_data = this->blob_top_->cpu_data();
43 for (int i = 0; i < this->blob_bottom_->count(); ++i) {
44 EXPECT_GE(top_data[i], 0.);
45 EXPECT_TRUE(top_data[i] == 0 || top_data[i] == bottom_data[i]);
46 }
47 }
49 TYPED_TEST(NeuronLayerTest, TestReLUGPU) {
50 LayerParameter layer_param;
51 Caffeine::set_mode(Caffeine::GPU);
52 ReLULayer<TypeParam> layer(layer_param);
53 layer.Forward(this->blob_bottom_vec_, &(this->blob_top_vec_));
54 // Now, check values
55 const TypeParam* bottom_data = this->blob_bottom_->cpu_data();
56 const TypeParam* top_data = this->blob_top_->cpu_data();
57 for (int i = 0; i < this->blob_bottom_->count(); ++i) {
58 EXPECT_GE(top_data[i], 0.);
59 EXPECT_TRUE(top_data[i] == 0 || top_data[i] == bottom_data[i]);
60 }
61 }
63 }