a bunch of updates.
[jacinto-ai/caffe-jacinto.git] / src / caffe / test / test_net_proto.cpp
1 // Copyright 2013 Yangqing Jia
3 #include <cuda_runtime.h>
4 #include <fcntl.h>
5 #include <google/protobuf/text_format.h>
6 #include <google/protobuf/io/zero_copy_stream_impl.h>
7 #include <gtest/gtest.h>
9 #include <cstring>
11 #include "caffe/blob.hpp"
12 #include "caffe/common.hpp"
13 #include "caffe/net.hpp"
14 #include "caffe/filler.hpp"
15 #include "caffe/proto/caffe.pb.h"
16 #include "caffe/util/io.hpp"
18 #include "caffe/test/lenet.hpp"
19 #include "caffe/test/test_caffe_main.hpp"
21 namespace caffe {
23 template <typename Dtype>
24 class NetProtoTest : public ::testing::Test {};
26 typedef ::testing::Types<float, double> Dtypes;
27 TYPED_TEST_CASE(NetProtoTest, Dtypes);
29 TYPED_TEST(NetProtoTest, TestLoadFromText) {
30   NetParameter net_param;
31   ReadProtoFromTextFile("caffe/test/data/lenet.prototxt", &net_param);
32 }
34 TYPED_TEST(NetProtoTest, TestSetup) {
35   NetParameter net_param;
36   string lenet_string(kLENET);
37   // Load the network
38   CHECK(google::protobuf::TextFormat::ParseFromString(
39       lenet_string, &net_param));
40   // check if things are right
41   EXPECT_EQ(net_param.layers_size(), 9);
42   EXPECT_EQ(net_param.input_size(), 2);
44   // Now, initialize a network using the parameter
45   shared_ptr<Blob<TypeParam> > data(new Blob<TypeParam>(10, 1, 28, 28));
46   shared_ptr<Blob<TypeParam> > label(new Blob<TypeParam>(10, 1, 1, 1));
47   FillerParameter filler_param;
48   shared_ptr<Filler<TypeParam> > filler;
49   filler.reset(new ConstantFiller<TypeParam>(filler_param));
50   filler->Fill(label.get());
51   filler.reset(new UniformFiller<TypeParam>(filler_param));
52   filler->Fill(data.get());
54   vector<Blob<TypeParam>*> bottom_vec;
55   bottom_vec.push_back(data.get());
56   bottom_vec.push_back(label.get());
58   Net<TypeParam> caffe_net(net_param, bottom_vec);
59   EXPECT_EQ(caffe_net.layer_names().size(), 9);
60   EXPECT_EQ(caffe_net.blob_names().size(), 10);
62   // Print a few statistics to see if things are correct
63   for (int i = 0; i < caffe_net.blobs().size(); ++i) {
64     LOG(ERROR) << "Blob: " << caffe_net.blob_names()[i];
65     LOG(ERROR) << "size: " << caffe_net.blobs()[i]->num() << ", "
66         << caffe_net.blobs()[i]->channels() << ", "
67         << caffe_net.blobs()[i]->height() << ", "
68         << caffe_net.blobs()[i]->width();
69   }
70   // Run the network without training.
71   vector<Blob<TypeParam>*> top_vec;
72   LOG(ERROR) << "Performing Forward";
73   caffe_net.Forward(bottom_vec);
74   LOG(ERROR) << "Performing Backward";
75   LOG(ERROR) << caffe_net.Backward();
76 }
78 }  // namespace caffe