Several changes:
authorYangqing Jia <jiayq84@gmail.com>
Mon, 2 Dec 2013 23:44:43 +0000 (15:44 -0800)
committerYangqing Jia <jiayq84@gmail.com>
Mon, 2 Dec 2013 23:44:43 +0000 (15:44 -0800)
changed the paths for the mnist demo
removed unused fields in SolverParameter
added solver_mode to specify CPU/GPU solving
accordingly, removed the set mode code in the examples code
removed examples/test_read_imagenet since it is trivial
removed get_cifar script since no cifar demo exists.

data/get_cifar.sh [deleted file]
data/lenet.prototxt
data/lenet_solver.prototxt
data/lenet_test.prototxt
examples/finetune_net.cpp
examples/test_read_imagenet.cpp [deleted file]
examples/train_net.cpp
src/caffe/proto/caffe.proto
src/caffe/solver.cpp

diff --git a/data/get_cifar.sh b/data/get_cifar.sh
deleted file mode 100755 (executable)
index 6f42bb0..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/usr/bin/env sh
-# This scripts downloads the mnist data and unzips it.
-
-echo "Downloading..."
-
-wget -q http://www.cs.toronto.edu/~kriz/cifar-10-binary.tar.gz
-
-echo "Unzipping..."
-
-tar xzf cifar-10-binary.tar.gz
-
-echo "Done."
index 085ed43f2320dec1b3977154fd29666438a998ac..c8a99946bc70e01365f768932a6b12e416b28446 100644 (file)
@@ -3,7 +3,7 @@ layers {
   layer {
     name: "mnist"
     type: "data"
-    source: "data/mnist-train-leveldb"
+    source: "mnist-train-leveldb"
     batchsize: 64
     scale: 0.00390625
   }
index d58255b9e31368c87b0445722a51228e36f347db..d0edc0f0c874530d03ca36721c9026b254dc5b6f 100644 (file)
@@ -1,12 +1,27 @@
-train_net: "data/lenet.prototxt"
-test_net: "data/lenet_test.prototxt"
+# The training protocol buffer definition
+train_net: "lenet.prototxt"
+# The testing protocol buffer definition
+test_net: "lenet_test.prototxt"
+# test_iter specifies how many forward passes the test should carry out.
+# In the case of MNIST, we have test batch size 100 and 100 test iterations,
+# covering the full 10,000 testing images.
+test_iter: 100
+# Carry out testing every 500 training iterations.
+test_interval: 500
+# The base learning rate, momentum and the weight decay of the network.
 base_lr: 0.01
+momentum: 0.9
+weight_decay: 0.0005
+# The learning rate policy
 lr_policy: "inv"
 gamma: 0.0001
 power: 0.75
+# Display every 100 iterations
 display: 100
-max_iter: 5000
-momentum: 0.9
-weight_decay: 0.0005
-test_iter: 100
-test_interval: 500
\ No newline at end of file
+# The maximum number of iterations
+max_iter: 10000
+# snapshot intermediate results
+snapshot: 5000
+snapshot_prefix: "lenet"
+# solver mode: 0 for CPU and 1 for GPU
+solver_mode: 1
index fdda4a67ee0325f17aa695dd0fec8bc625723a84..676a2a6ab7d06d916455517bc2f66dd2d5bd41c6 100644 (file)
@@ -3,7 +3,7 @@ layers {
   layer {
     name: "mnist"
     type: "data"
-    source: "data/mnist-test-leveldb"
+    source: "mnist-test-leveldb"
     batchsize: 100
     scale: 0.00390625
   }
index d35b425c6196234f377564dca0d57f9eea34acbd..559715d6707c9fcdef3dea616fad07832a2470f9 100644 (file)
@@ -19,9 +19,6 @@ int main(int argc, char** argv) {
     return 0;
   }
 
-  Caffe::SetDevice(0);
-  Caffe::set_mode(Caffe::GPU);
-
   SolverParameter solver_param;
   ReadProtoFromTextFile(argv[1], &solver_param);
 
diff --git a/examples/test_read_imagenet.cpp b/examples/test_read_imagenet.cpp
deleted file mode 100644 (file)
index 7b61990..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2013 Yangqing Jia
-
-#include <glog/logging.h>
-#include <leveldb/db.h>
-
-#include <string>
-
-int main(int argc, char** argv) {
-  ::google::InitGoogleLogging(argv[0]);
-  leveldb::DB* db;
-  leveldb::Options options;
-  options.create_if_missing = false;
-
-  LOG(INFO) << "Opening leveldb " << argv[1];
-  leveldb::Status status = leveldb::DB::Open(
-      options, argv[1], &db);
-  CHECK(status.ok()) << "Failed to open leveldb " << argv[1];
-
-  leveldb::ReadOptions read_options;
-  read_options.fill_cache = false;
-  int count = 0;
-  leveldb::Iterator* it = db->NewIterator(read_options);
-  for (it->SeekToFirst(); it->Valid(); it->Next()) {
-    // just a dummy operation
-    LOG(ERROR) << it->key().ToString();
-    if (++count % 10000 == 0) {
-      LOG(ERROR) << "Processed " << count << " files.";
-    }
-  }
-
-  delete db;
-  return 0;
-}
index d84619b2d44c10028fa5fdd215a020c03b677b9a..ce62616b1186aa398c07cb8edfbad6df8ac0405a 100644 (file)
@@ -20,9 +20,6 @@ int main(int argc, char** argv) {
     return 0;
   }
 
-  Caffe::SetDevice(0);
-  Caffe::set_mode(Caffe::GPU);
-
   SolverParameter solver_param;
   ReadProtoFromTextFile(argv[1], &solver_param);
 
index 5b4c9ed52754b30ae1dc5748a689a826c9724990..e1be61c35e15780691c4b9ae34115857707fa82d 100644 (file)
@@ -137,11 +137,8 @@ message SolverParameter {
   // whether to snapshot diff in the results or not. Snapshotting diff will help
   // debugging but the final protocol buffer size will be much larger.
   optional bool snapshot_diff = 16 [ default = false];
-
-  // the asynchronous solver stuff
-  optional string tcp_port = 20 [ default = "20901"];
-  optional string tcp_server = 21;
-  optional int32 communication_interval = 22;
+  // the mode solver will use: 0 for CPU and 1 for GPU. Use GPU in default.
+  optional int32 solver_mode = 17 [default = 1];
 }
 
 // A message that stores the solver snapshots
index 5c25641ce9caaf19479d8d6e3ab08d98b6dde78d..e02b72f31f657f2bc7bf84c72853d2e64ddb00f7 100644 (file)
@@ -39,6 +39,7 @@ Solver<Dtype>::Solver(const SolverParameter& param)
 
 template <typename Dtype>
 void Solver<Dtype>::Solve(const char* resume_file) {
+  Caffe::set_mode(Caffe::Brew(param_.solver_mode()));
   Caffe::set_phase(Caffe::TRAIN);
   LOG(INFO) << "Solving " << net_->name();
   PreSolve();
@@ -71,6 +72,9 @@ void Solver<Dtype>::Solve(const char* resume_file) {
       Caffe::set_phase(Caffe::TRAIN);
     }
   }
+  // After the optimization is done, always do a snapshot.
+  iter_--;
+  Snapshot();
   LOG(INFO) << "Optimization Done.";
 }