TYPED_TEST(ReshapeLayerTest, TestForwardAfterReshape) { typedef typename TypeParam::Dtype Dtype; LayerParameter layer_param; BlobShape* shape = layer_param.mutable_reshape_param()->mutable_shape(); shape->add_dim(6); shape->add_dim(2); shape->add_dim(3); shape->add_dim(5); ReshapeLayer<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 know the above produced the correct result from TestForward. // Reshape the bottom and call layer.Reshape, then try again. vector<int> new_bottom_shape(1, 2 * 3 * 6 * 5); this->blob_bottom_->Reshape(new_bottom_shape); layer.Reshape(this->blob_bottom_vec_, this->blob_top_vec_); FillerParameter filler_param; GaussianFiller<Dtype> filler(filler_param); filler.Fill(this->blob_bottom_); layer.Forward(this->blob_bottom_vec_, this->blob_top_vec_); for (int i = 0; i < this->blob_bottom_->count(); ++i) { EXPECT_EQ(this->blob_top_->cpu_data()[i], this->blob_bottom_->cpu_data()[i]); } }
TYPED_TEST(ReshapeLayerTest, TestGradient) { typedef typename TypeParam::Dtype Dtype; LayerParameter layer_param; BlobShape* shape = layer_param.mutable_reshape_param()->mutable_shape(); shape->add_dim(6); shape->add_dim(2); shape->add_dim(3); shape->add_dim(5); ReshapeLayer<Dtype> layer(layer_param); GradientChecker<Dtype> checker(1e-2, 1e-2); checker.CheckGradientEltwise(&layer, this->blob_bottom_vec_, this->blob_top_vec_); }
TYPED_TEST(ReshapeLayerTest, TestForward) { typedef typename TypeParam::Dtype Dtype; LayerParameter layer_param; BlobShape* shape = layer_param.mutable_reshape_param()->mutable_shape(); shape->add_dim(6); shape->add_dim(2); shape->add_dim(3); shape->add_dim(5); ReshapeLayer<Dtype> layer(layer_param); layer.SetUp(this->blob_bottom_vec_, this->blob_top_vec_); layer.Forward(this->blob_bottom_vec_, this->blob_top_vec_); for (int i = 0; i < this->blob_bottom_->count(); ++i) { EXPECT_EQ(this->blob_top_->cpu_data()[i], this->blob_bottom_->cpu_data()[i]); } }
BlobShape ModelServer<DType>::blob_shape_by_name(string name) { const vector<int>& shape = solver->net()->blob_by_name(name)->shape(); BlobShape ret; for (uint32_t i = 0; i < shape.size(); ++i) { ret.add_dim(shape[i]); } return ret; }
virtual void SetUp() { BlobShape shape; shape.add_dim(1); // Batch shape.add_dim(8); // Channels shape.add_dim(4); // Depth shape.add_dim(4); // Height shape.add_dim(4); // Width blob_bottom_->Reshape(shape); shape.add_dim(1); // Batch shape.add_dim(8); // Channels shape.add_dim(2); // Depth shape.add_dim(2); // Height shape.add_dim(2); // Width blob_top_->Reshape(shape); // fill the values blob_bottom_vec_.push_back(blob_bottom_); blob_top_vec_.push_back(blob_top_); }