SINGA-300 - Add residual networks for imagenet classification
fix bugs for using CPU
diff --git a/examples/imagenet/resnet/README.md b/examples/imagenet/resnet/README.md
index 4d5f231..4a0f4da 100644
--- a/examples/imagenet/resnet/README.md
+++ b/examples/imagenet/resnet/README.md
@@ -26,7 +26,7 @@
* Example
# use cpu
- $ python serve.py -C --parameter_file resnet-18.pickle --model resnet --depth 18 &
+ $ python serve.py --use_cpu --parameter_file resnet-18.pickle --model resnet --depth 18 &
# use gpu
$ python serve.py --parameter_file resnet-18.pickle --model resnet --depth 18 &
diff --git a/examples/imagenet/resnet/model.py b/examples/imagenet/resnet/model.py
index 34dfd9f..bf90da3 100644
--- a/examples/imagenet/resnet/model.py
+++ b/examples/imagenet/resnet/model.py
@@ -21,6 +21,7 @@
Split, Merge, Flatten, Dense, BatchNormalization, Softmax
from singa import net as ffnet
from singa import initializer
+from singa import layer
ffnet.verbose=True
@@ -257,7 +258,9 @@
return net
-def create_net(name, depth):
+def create_net(name, depth, use_cpu):
+ if use_cpu:
+ layer.engine = 'singacpp'
if name == 'resnet':
return create_resnet(depth)
elif name == 'wrn':
diff --git a/examples/imagenet/resnet/serve.py b/examples/imagenet/resnet/serve.py
index aea7b18..ba5adb1 100644
--- a/examples/imagenet/resnet/serve.py
+++ b/examples/imagenet/resnet/serve.py
@@ -117,8 +117,8 @@
# Setup argument parser
parser = ArgumentParser(description="Wide residual network")
- parser.add_argument("-p", "--port", default=9999, help="listen port")
- parser.add_argument("-c", "--use_cpu", action="store_true",
+ parser.add_argument("--port", default=9999, help="listen port")
+ parser.add_argument("--use_cpu", action="store_true",
help="If set, load models onto CPU devices")
parser.add_argument("--parameter_file", default="wrn-50-2.pickle")
parser.add_argument("--model", choices = ['resnet', 'wrn', 'preact', 'addbn'], default='wrn')
@@ -131,9 +131,14 @@
# start to train
agent = Agent(port)
- net = model.create_net(args.model, args.depth)
- dev = device.create_cuda_gpu()
- net.to_device(dev)
+ net = model.create_net(args.model, args.depth, args.use_cpu)
+ if args.use_cpu:
+ print 'Using CPU'
+ dev = device.get_default_device()
+ else:
+ print 'Using GPU'
+ dev = device.create_cuda_gpu()
+ net.to_device(dev)
model.init_params(net, args.parameter_file)
print 'Finish loading models'