summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (from parent 1: 524e095)
raw | patch | inline | side by side (from parent 1: 524e095)
author | Yangqing Jia <jiayq84@gmail.com> | |
Mon, 2 Dec 2013 23:44:43 +0000 (15:44 -0800) | ||
committer | Yangqing 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.
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] | patch | blob | history |
data/lenet.prototxt | patch | blob | history | |
data/lenet_solver.prototxt | patch | blob | history | |
data/lenet_test.prototxt | patch | blob | history | |
examples/finetune_net.cpp | patch | blob | history | |
examples/test_read_imagenet.cpp | [deleted file] | patch | blob | history |
examples/train_net.cpp | patch | blob | history | |
src/caffe/proto/caffe.proto | patch | blob | history | |
src/caffe/solver.cpp | patch | blob | history |
diff --git a/data/get_cifar.sh b/data/get_cifar.sh
--- 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 085ed43f2320dec1b3977154fd29666438a998ac..c8a99946bc70e01365f768932a6b12e416b28446 100644 (file)
--- a/data/lenet.prototxt
+++ b/data/lenet.prototxt
layer {
name: "mnist"
type: "data"
- source: "data/mnist-train-leveldb"
+ source: "mnist-train-leveldb"
batchsize: 64
scale: 0.00390625
}
index d58255b9e31368c87b0445722a51228e36f347db..d0edc0f0c874530d03ca36721c9026b254dc5b6f 100644 (file)
-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)
--- a/data/lenet_test.prototxt
+++ b/data/lenet_test.prototxt
layer {
name: "mnist"
type: "data"
- source: "data/mnist-test-leveldb"
+ source: "mnist-test-leveldb"
batchsize: 100
scale: 0.00390625
}
index d35b425c6196234f377564dca0d57f9eea34acbd..559715d6707c9fcdef3dea616fad07832a2470f9 100644 (file)
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
+++ /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 d84619b2d44c10028fa5fdd215a020c03b677b9a..ce62616b1186aa398c07cb8edfbad6df8ac0405a 100644 (file)
--- a/examples/train_net.cpp
+++ b/examples/train_net.cpp
return 0;
}
- Caffe::SetDevice(0);
- Caffe::set_mode(Caffe::GPU);
-
SolverParameter solver_param;
ReadProtoFromTextFile(argv[1], &solver_param);
index 5b4c9ed52754b30ae1dc5748a689a826c9724990..e1be61c35e15780691c4b9ae34115857707fa82d 100644 (file)
// 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 5c25641ce9caaf19479d8d6e3ab08d98b6dde78d..e02b72f31f657f2bc7bf84c72853d2e64ddb00f7 100644 (file)
--- a/src/caffe/solver.cpp
+++ b/src/caffe/solver.cpp
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();
Caffe::set_phase(Caffe::TRAIN);
}
}
+ // After the optimization is done, always do a snapshot.
+ iter_--;
+ Snapshot();
LOG(INFO) << "Optimization Done.";
}