diff options
-rwxr-xr-x | data/get_cifar.sh | 12 | ||||
-rw-r--r-- | data/lenet.prototxt | 2 | ||||
-rw-r--r-- | data/lenet_solver.prototxt | 29 | ||||
-rw-r--r-- | data/lenet_test.prototxt | 2 | ||||
-rw-r--r-- | examples/finetune_net.cpp | 3 | ||||
-rw-r--r-- | examples/test_read_imagenet.cpp | 33 | ||||
-rw-r--r-- | examples/train_net.cpp | 3 | ||||
-rw-r--r-- | src/caffe/proto/caffe.proto | 7 | ||||
-rw-r--r-- | src/caffe/solver.cpp | 4 |
9 files changed, 30 insertions, 65 deletions
diff --git a/data/get_cifar.sh b/data/get_cifar.sh deleted file mode 100755 index 6f42bb09..00000000 --- a/data/get_cifar.sh +++ /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." diff --git a/data/lenet.prototxt b/data/lenet.prototxt index 085ed43f..c8a99946 100644 --- a/data/lenet.prototxt +++ b/data/lenet.prototxt @@ -3,7 +3,7 @@ layers { layer { name: "mnist" type: "data" - source: "data/mnist-train-leveldb" + source: "mnist-train-leveldb" batchsize: 64 scale: 0.00390625 } diff --git a/data/lenet_solver.prototxt b/data/lenet_solver.prototxt index d58255b9..d0edc0f0 100644 --- a/data/lenet_solver.prototxt +++ b/data/lenet_solver.prototxt @@ -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 diff --git a/data/lenet_test.prototxt b/data/lenet_test.prototxt index fdda4a67..676a2a6a 100644 --- a/data/lenet_test.prototxt +++ b/data/lenet_test.prototxt @@ -3,7 +3,7 @@ layers { layer { name: "mnist" type: "data" - source: "data/mnist-test-leveldb" + source: "mnist-test-leveldb" batchsize: 100 scale: 0.00390625 } diff --git a/examples/finetune_net.cpp b/examples/finetune_net.cpp index d35b425c..559715d6 100644 --- a/examples/finetune_net.cpp +++ b/examples/finetune_net.cpp @@ -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 index 7b61990b..00000000 --- a/examples/test_read_imagenet.cpp +++ /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; -} diff --git a/examples/train_net.cpp b/examples/train_net.cpp index d84619b2..ce62616b 100644 --- a/examples/train_net.cpp +++ b/examples/train_net.cpp @@ -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); diff --git a/src/caffe/proto/caffe.proto b/src/caffe/proto/caffe.proto index 5b4c9ed5..e1be61c3 100644 --- a/src/caffe/proto/caffe.proto +++ b/src/caffe/proto/caffe.proto @@ -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 diff --git a/src/caffe/solver.cpp b/src/caffe/solver.cpp index 5c25641c..e02b72f3 100644 --- a/src/caffe/solver.cpp +++ b/src/caffe/solver.cpp @@ -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."; } |