summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xdata/get_cifar.sh12
-rw-r--r--data/lenet.prototxt2
-rw-r--r--data/lenet_solver.prototxt29
-rw-r--r--data/lenet_test.prototxt2
-rw-r--r--examples/finetune_net.cpp3
-rw-r--r--examples/test_read_imagenet.cpp33
-rw-r--r--examples/train_net.cpp3
-rw-r--r--src/caffe/proto/caffe.proto7
-rw-r--r--src/caffe/solver.cpp4
9 files changed, 30 insertions, 65 deletions
diff --git a/data/get_cifar.sh b/data/get_cifar.sh
deleted file mode 100755
index 6f42bb0..0000000
--- 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 085ed43..c8a9994 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 d58255b..d0edc0f 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 fdda4a6..676a2a6 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 d35b425..559715d 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 7b61990..0000000
--- 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 d84619b..ce62616 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 5b4c9ed..e1be61c 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 5c25641..e02b72f 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.";
}