removed the net proto test that relies on external data
[platform/upstream/caffeonacl.git] / src / caffe / test / test_solver_linear_regression.cpp
1 // Copyright 2013 Yangqing Jia
2
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>
8
9 #include <cstring>
10
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"
17 #include "caffe/optimization/solver.hpp"
18
19 #include "caffe/test/test_caffe_main.hpp"
20
21 namespace caffe {
22
23 template <typename Dtype>
24 class SolverTest : public ::testing::Test {};
25
26 typedef ::testing::Types<float, double> Dtypes;
27 TYPED_TEST_CASE(SolverTest, Dtypes);
28
29 TYPED_TEST(SolverTest, TestSolveGPU) {
30   Caffe::set_mode(Caffe::GPU);
31
32   NetParameter net_param;
33   ReadProtoFromTextFile("data/linear_regression.prototxt",
34       &net_param);
35   // check if things are right
36   EXPECT_EQ(net_param.layers_size(), 3);
37   EXPECT_EQ(net_param.input_size(), 0);
38   vector<Blob<TypeParam>*> bottom_vec;
39   Net<TypeParam> caffe_net(net_param, bottom_vec);
40   EXPECT_EQ(caffe_net.layer_names().size(), 3);
41   EXPECT_EQ(caffe_net.blob_names().size(), 3);
42
43   // Run the network without training.
44   LOG(INFO) << "Performing Forward";
45   caffe_net.Forward(bottom_vec);
46   LOG(INFO) << "Performing Backward";
47   LOG(INFO) << "Initial loss: " << caffe_net.Backward();
48
49   SolverParameter solver_param;
50   solver_param.set_base_lr(0.1);
51   solver_param.set_display(0);
52   solver_param.set_max_iter(100);
53   solver_param.set_lr_policy("inv");
54   solver_param.set_gamma(1.);
55   solver_param.set_power(0.75);
56   solver_param.set_momentum(0.9);
57
58   LOG(INFO) << "Starting Optimization";
59   SGDSolver<TypeParam> solver(solver_param);
60   solver.Solve(&caffe_net);
61   LOG(INFO) << "Optimization Done.";
62   LOG(INFO) << "Weight: " << caffe_net.params()[0]->cpu_data()[0] << ", "
63       << caffe_net.params()[0]->cpu_data()[1];
64   LOG(INFO) << "Bias: " << caffe_net.params()[1]->cpu_data()[0];
65
66   EXPECT_GE(caffe_net.params()[0]->cpu_data()[0], 0.3);
67   EXPECT_LE(caffe_net.params()[0]->cpu_data()[0], 0.35);
68
69   EXPECT_GE(caffe_net.params()[0]->cpu_data()[1], 0.3);
70   EXPECT_LE(caffe_net.params()[0]->cpu_data()[1], 0.35);
71
72   EXPECT_GE(caffe_net.params()[1]->cpu_data()[0], -0.01);
73   EXPECT_LE(caffe_net.params()[1]->cpu_data()[0], 0.01);
74 }
75
76
77
78 TYPED_TEST(SolverTest, TestSolveCPU) {
79   Caffe::set_mode(Caffe::CPU);
80
81   NetParameter net_param;
82   ReadProtoFromTextFile("data/linear_regression.prototxt",
83       &net_param);
84   // check if things are right
85   EXPECT_EQ(net_param.layers_size(), 3);
86   EXPECT_EQ(net_param.input_size(), 0);
87   vector<Blob<TypeParam>*> bottom_vec;
88   Net<TypeParam> caffe_net(net_param, bottom_vec);
89   EXPECT_EQ(caffe_net.layer_names().size(), 3);
90   EXPECT_EQ(caffe_net.blob_names().size(), 3);
91
92   // Run the network without training.
93   LOG(INFO) << "Performing Forward";
94   caffe_net.Forward(bottom_vec);
95   LOG(INFO) << "Performing Backward";
96   LOG(INFO) << "Initial loss: " << caffe_net.Backward();
97
98   SolverParameter solver_param;
99   solver_param.set_base_lr(0.1);
100   solver_param.set_display(0);
101   solver_param.set_max_iter(100);
102   solver_param.set_lr_policy("inv");
103   solver_param.set_gamma(1.);
104   solver_param.set_power(0.75);
105   solver_param.set_momentum(0.9);
106
107   LOG(INFO) << "Starting Optimization";
108   SGDSolver<TypeParam> solver(solver_param);
109   solver.Solve(&caffe_net);
110   LOG(INFO) << "Optimization Done.";
111   LOG(INFO) << "Weight: " << caffe_net.params()[0]->cpu_data()[0] << ", "
112       << caffe_net.params()[0]->cpu_data()[1];
113   LOG(INFO) << "Bias: " << caffe_net.params()[1]->cpu_data()[0];
114
115   EXPECT_GE(caffe_net.params()[0]->cpu_data()[0], 0.3);
116   EXPECT_LE(caffe_net.params()[0]->cpu_data()[0], 0.35);
117
118   EXPECT_GE(caffe_net.params()[0]->cpu_data()[1], 0.3);
119   EXPECT_LE(caffe_net.params()[0]->cpu_data()[1], 0.35);
120
121   EXPECT_GE(caffe_net.params()[1]->cpu_data()[0], -0.01);
122   EXPECT_LE(caffe_net.params()[1]->cpu_data()[0], 0.01);
123 }
124
125 }  // namespace caffe