test rectangular im2col
authorEvan Shelhamer <shelhamer@imaginarynumber.net>
Wed, 18 Jun 2014 05:08:00 +0000 (22:08 -0700)
committerEvan Shelhamer <shelhamer@imaginarynumber.net>
Tue, 29 Jul 2014 08:20:39 +0000 (01:20 -0700)
src/caffe/test/test_im2col_layer.cpp

index a40f59d..0463cee 100644 (file)
@@ -83,4 +83,37 @@ TYPED_TEST(Im2colLayerTest, TestGradient) {
 }
 
 
+TYPED_TEST(Im2colLayerTest, TestRect) {
+  typedef typename TypeParam::Dtype Dtype;
+  LayerParameter layer_param;
+  ConvolutionParameter* convolution_param =
+      layer_param.mutable_convolution_param();
+  convolution_param->set_kernel_h(5);
+  convolution_param->set_kernel_w(3);
+  convolution_param->set_stride(2);
+  Im2colLayer<Dtype> layer(layer_param);
+  layer.SetUp(this->blob_bottom_vec_, &(this->blob_top_vec_));
+  layer.Forward(this->blob_bottom_vec_, &(this->blob_top_vec_));
+  // We are lazy and will only check the top left block
+  for (int c = 0; c < 45; ++c) {
+    EXPECT_EQ(this->blob_top_->data_at(0, c, 0, 0),
+        this->blob_bottom_->data_at(0, (c / 15), (c / 5) % 5, c % 5));
+  }
+}
+
+
+TYPED_TEST(Im2colLayerTest, TestRectGradient) {
+  typedef typename TypeParam::Dtype Dtype;
+  LayerParameter layer_param;
+  ConvolutionParameter* convolution_param =
+      layer_param.mutable_convolution_param();
+  convolution_param->set_kernel_h(5);
+  convolution_param->set_kernel_w(3);
+  convolution_param->set_stride(2);
+  Im2colLayer<Dtype> layer(layer_param);
+  GradientChecker<Dtype> checker(1e-2, 1e-2);
+  checker.CheckGradientExhaustive(&layer, &(this->blob_bottom_vec_),
+      &(this->blob_top_vec_));
+}
+
 }  // namespace caffe