SINGA-290 Upgrade to Python 3
Project: http://git-wip-us.apache.org/repos/asf/incubator-singa/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-singa/commit/c94b3dfd Tree: http://git-wip-us.apache.org/repos/asf/incubator-singa/tree/c94b3dfd Diff: http://git-wip-us.apache.org/repos/asf/incubator-singa/diff/c94b3dfd Branch: refs/heads/master Commit: c94b3dfd273994ecd17d361558b8e019c1cf3ed3 Parents: 14f0d8c Author: Moaz Reyad <[email protected]> Authored: Wed May 31 13:34:26 2017 +0800 Committer: Wei Wang <[email protected]> Committed: Thu Aug 3 18:15:59 2017 +0800 ---------------------------------------------------------------------- cmake/Dependencies.cmake | 3 +- doc/en/docs/notebook/utils.py | 6 +++- examples/caffe/predict.py | 9 ++++-- examples/char-rnn/sample.py | 12 ++++++-- examples/char-rnn/train.py | 46 ++++++++++++++++++------------- examples/cifar10/alexnet.py | 4 ++- examples/cifar10/caffe/caffe_net.py | 12 +++++--- examples/cifar10/download_data.py | 19 +++++++------ examples/cifar10/predict.py | 10 +++++-- examples/cifar10/resnet.py | 8 ++++-- examples/cifar10/train.py | 40 ++++++++++++++++----------- examples/cifar10/vgg.py | 8 ++++-- examples/imagenet/googlenet/serve.py | 15 ++++++---- examples/imagenet/resnet/convert.py | 3 +- examples/imagenet/resnet/model.py | 5 +++- examples/imagenet/resnet/serve.py | 25 ++++++++++------- examples/mnist/train.py | 32 ++++++++++++--------- python/CMakeLists.txt | 9 +++++- python/rafiki/agent.py | 10 ++++--- python/singa/layer.py | 9 +++--- python/singa/loss.py | 2 +- python/singa/optimizer.py | 19 ++++++------- python/singa/snapshot.py | 4 +-- python/singa/tensor.py | 17 +++++++++++- src/api/model_layer.i | 1 + src/api/model_optimizer.i | 1 + test/python/test_layer.py | 1 + test/python/test_loss.py | 4 ++- test/python/test_metric.py | 8 ++++-- test/python/test_net.py | 5 +++- test/python/test_optimizer.py | 8 ++++-- test/python/test_tensor.py | 4 ++- tool/debian/postinst | 2 +- tool/opencl/clsrc_to_str.py | 2 +- 34 files changed, 233 insertions(+), 130 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/c94b3dfd/cmake/Dependencies.cmake ---------------------------------------------------------------------- diff --git a/cmake/Dependencies.cmake b/cmake/Dependencies.cmake index aa3c090..180732b 100644 --- a/cmake/Dependencies.cmake +++ b/cmake/Dependencies.cmake @@ -127,11 +127,12 @@ IF(USE_PYTHON) IF(PYTHON2) FIND_PACKAGE(PythonLibs 2.7 REQUIRED) FIND_PACKAGE(PythonInterp 2.7 REQUIRED) + FIND_PACKAGE(SWIG 3.0.10 REQUIRED) ELSE() FIND_PACKAGE(PythonLibs 3.0 REQUIRED) FIND_PACKAGE(PythonInterp 3.0 REQUIRED) + FIND_PACKAGE(SWIG 3.0.10 REQUIRED) ENDIF() - FIND_PACKAGE(SWIG 3.0 REQUIRED) ENDIF() IF(USE_JAVA) http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/c94b3dfd/doc/en/docs/notebook/utils.py ---------------------------------------------------------------------- diff --git a/doc/en/docs/notebook/utils.py b/doc/en/docs/notebook/utils.py index ff772ad..3af9ec5 100755 --- a/doc/en/docs/notebook/utils.py +++ b/doc/en/docs/notebook/utils.py @@ -5,6 +5,10 @@ processing the outputs into a more understandable way. For example ``tile_raster_images`` helps in generating a easy to grasp image from a set of samples or weights. """ +from __future__ import division +from builtins import zip +from builtins import range +from past.utils import old_div import numpy @@ -13,7 +17,7 @@ def scale_to_unit_interval(ndar, eps=1e-8): """ Scales all values in the ndarray ndar to be between 0 and 1 """ ndar = ndar.copy() ndar -= ndar.min() - ndar *= 1.0 / (ndar.max() + eps) + ndar *= old_div(1.0, (ndar.max() + eps)) return ndar http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/c94b3dfd/examples/caffe/predict.py ---------------------------------------------------------------------- diff --git a/examples/caffe/predict.py b/examples/caffe/predict.py index 663cd87..62e6a86 100644 --- a/examples/caffe/predict.py +++ b/examples/caffe/predict.py @@ -1,3 +1,6 @@ +from __future__ import print_function +from builtins import input +from builtins import range # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information @@ -69,11 +72,11 @@ def predict(net, dev, synset_list, topk=5): topk, return the topk labels for each image. ''' while True: - img_path = raw_input("Enter input image path('quit' to exit): ") + img_path = eval(input("Enter input image path('quit' to exit): ")) if img_path == 'quit': return if not os.path.exists(img_path): - print 'Path is invalid' + print('Path is invalid') continue img = read_image(img_path) x = tensor.from_numpy(img.astype(np.float32)[np.newaxis,:]) @@ -82,7 +85,7 @@ def predict(net, dev, synset_list, topk=5): y.to_host() prob = tensor.to_numpy(y) lbl = np.argsort(-prob[0]) # sort prob in descending order - print [synset_list[lbl[i]] for i in range(topk)] + print([synset_list[lbl[i]] for i in range(topk)]) if __name__ == '__main__': http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/c94b3dfd/examples/char-rnn/sample.py ---------------------------------------------------------------------- diff --git a/examples/char-rnn/sample.py b/examples/char-rnn/sample.py index 9b6e757..5b0b66a 100644 --- a/examples/char-rnn/sample.py +++ b/examples/char-rnn/sample.py @@ -15,8 +15,14 @@ # limitations under the License. # ============================================================================= '''Sample characters from the pre-trained model''' +from __future__ import division +from __future__ import print_function +from future import standard_library +standard_library.install_aliases() +from builtins import range +from past.utils import old_div import sys -import cPickle as pickle +import pickle as pickle import numpy as np import argparse @@ -69,7 +75,7 @@ def sample(model_path, nsamples=100, seed_text='', do_sample=True): sys.stdout.write(seed_text) else: y = tensor.Tensor((1, vocab_size), cuda) - y.set_value(1.0 / vocab_size) + y.set_value(old_div(1.0, vocab_size)) for i in range(nsamples): y.to_host() @@ -89,7 +95,7 @@ def sample(model_path, nsamples=100, seed_text='', do_sample=True): y = tensor.softmax(y) hx = outputs[1] cx = outputs[2] - print '' + print('') if __name__ == '__main__': parser = argparse.ArgumentParser(description='sample chars from char-rnn') http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/c94b3dfd/examples/char-rnn/train.py ---------------------------------------------------------------------- diff --git a/examples/char-rnn/train.py b/examples/char-rnn/train.py index d28646e..0eeeb35 100644 --- a/examples/char-rnn/train.py +++ b/examples/char-rnn/train.py @@ -19,7 +19,15 @@ The model is created following https://github.com/karpathy/char-rnn The train file could be any text file, e.g., http://cs.stanford.edu/people/karpathy/char-rnn/ ''' -import cPickle as pickle +from __future__ import division +from __future__ import print_function +from future import standard_library +standard_library.install_aliases() +from builtins import zip +from builtins import range +from builtins import object +from past.utils import old_div +import pickle as pickle import numpy as np import argparse @@ -51,18 +59,18 @@ class Data(object): self.idx_to_char = {i: ch for i, ch in enumerate(chars)} data = [self.char_to_idx[c] for c in self.raw_data] # seq_length + 1 for the data + label - nsamples = len(data) / (1 + seq_length) + nsamples = old_div(len(data), (1 + seq_length)) data = data[0:nsamples * (1 + seq_length)] data = np.asarray(data, dtype=np.int32) data = np.reshape(data, (-1, seq_length + 1)) # shuffle all sequences np.random.shuffle(data) self.train_dat = data[0:int(data.shape[0]*train_ratio)] - self.num_train_batch = self.train_dat.shape[0] / batch_size + self.num_train_batch = old_div(self.train_dat.shape[0], batch_size) self.val_dat = data[self.train_dat.shape[0]:] - self.num_test_batch = self.val_dat.shape[0] / batch_size - print 'train dat', self.train_dat.shape - print 'val dat', self.val_dat.shape + self.num_test_batch = old_div(self.val_dat.shape[0], batch_size) + print('train dat', self.train_dat.shape) + print('val dat', self.val_dat.shape) def numpy2tensors(npx, npy, dev): @@ -94,7 +102,7 @@ def convert(batch, batch_size, seq_length, vocab_size, dev): def get_lr(epoch): - return 0.001 / float(1 << (epoch / 50)) + return old_div(0.001, float(1 << (old_div(epoch, 50)))) def train(data, max_epoch, hidden_size=100, seq_length=100, batch_size=16, @@ -111,10 +119,10 @@ def train(data, max_epoch, hidden_size=100, seq_length=100, batch_size=16, data.vocab_size, )) rnn.to_device(cuda) - print 'created rnn' + print('created rnn') rnn_w = rnn.param_values()[0] rnn_w.uniform(-0.08, 0.08) # init all rnn parameters - print 'rnn weight l1 = %f' % (rnn_w.l1()) + print('rnn weight l1 = %f' % (rnn_w.l1())) dense = layer.Dense( 'dense', data.vocab_size, @@ -124,12 +132,12 @@ def train(data, max_epoch, hidden_size=100, seq_length=100, batch_size=16, dense.to_device(cuda) dense_w = dense.param_values()[0] dense_b = dense.param_values()[1] - print 'dense w ', dense_w.shape - print 'dense b ', dense_b.shape + print('dense w ', dense_w.shape) + print('dense b ', dense_b.shape) initializer.uniform(dense_w, dense_w.shape[0], 0) - print 'dense weight l1 = %f' % (dense_w.l1()) + print('dense weight l1 = %f' % (dense_w.l1())) dense_b.set_value(0) - print 'dense b l1 = %f' % (dense_b.l1()) + print('dense b l1 = %f' % (dense_b.l1())) g_dense_w = tensor.Tensor(dense_w.shape, cuda) g_dense_b = tensor.Tensor(dense_b.shape, cuda) @@ -162,7 +170,7 @@ def train(data, max_epoch, hidden_size=100, seq_length=100, batch_size=16, # print output.l1(), act.l1() utils.update_progress( b * 1.0 / data.num_train_batch, 'training loss = %f' % - (batch_loss / seq_length)) + (old_div(batch_loss, seq_length))) train_loss += batch_loss grads.append(tensor.Tensor()) @@ -176,8 +184,8 @@ def train(data, max_epoch, hidden_size=100, seq_length=100, batch_size=16, opt.apply_with_lr( epoch, get_lr(epoch), g_dense_b, dense_b, 'dense_b') - print '\nEpoch %d, train loss is %f' % \ - (epoch, train_loss / data.num_train_batch / seq_length) + print('\nEpoch %d, train loss is %f' % \ + (epoch, train_loss / data.num_train_batch / seq_length)) eval_loss = 0 for b in range(data.num_test_batch): @@ -191,13 +199,13 @@ def train(data, max_epoch, hidden_size=100, seq_length=100, batch_size=16, output = dense.forward(model_pb2.kEval, output) eval_loss += lossfun.forward(model_pb2.kEval, output, label).l1() - print 'Epoch %d, evaluation loss is %f' % \ - (epoch, eval_loss / data.num_test_batch / seq_length) + print('Epoch %d, evaluation loss is %f' % \ + (epoch, eval_loss / data.num_test_batch / seq_length)) if (epoch + 1) % 30 == 0: # checkpoint the file model with open('%s_%d.bin' % (model_path, epoch), 'wb') as fd: - print 'saving model to %s' % model_path + print('saving model to %s' % model_path) d = {} for name, w in zip( ['rnn_w', 'dense_w', 'dense_b'], http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/c94b3dfd/examples/cifar10/alexnet.py ---------------------------------------------------------------------- diff --git a/examples/cifar10/alexnet.py b/examples/cifar10/alexnet.py index 02437b3..b056e70 100644 --- a/examples/cifar10/alexnet.py +++ b/examples/cifar10/alexnet.py @@ -19,6 +19,8 @@ https://code.google.com/p/cuda-convnet/source/browse/trunk/example-layers/layers Following the same setting for hyper-parameters and data pre-processing, the final validation accuracy would be about 82%. ''' +from __future__ import print_function +from builtins import zip # sys.path.append(os.path.join(os.path.dirname(__file__), '../../build/python')) from singa import layer @@ -56,6 +58,6 @@ def create_net(use_cpu=False): p.gaussian(filler.mean, filler.std) else: p.set_value(0) - print specs.name, filler.type, p.l1() + print(specs.name, filler.type, p.l1()) return net http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/c94b3dfd/examples/cifar10/caffe/caffe_net.py ---------------------------------------------------------------------- diff --git a/examples/cifar10/caffe/caffe_net.py b/examples/cifar10/caffe/caffe_net.py index 2db131a..dd1eb7d 100644 --- a/examples/cifar10/caffe/caffe_net.py +++ b/examples/cifar10/caffe/caffe_net.py @@ -1,3 +1,7 @@ +from __future__ import print_function +from future import standard_library +standard_library.install_aliases() +from builtins import zip # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information @@ -14,13 +18,13 @@ # See the License for the specific language governing permissions and # limitations under the License. # ============================================================================= -import urllib +import urllib.request, urllib.parse, urllib.error from singa import converter def create_net(use_cpu): - urllib.urlretrieve("https://raw.githubusercontent.com/BVLC/caffe/master/examples/cifar10/cifar10_full_train_test.prototxt", "train_test.prototxt") - urllib.urlretrieve("https://raw.githubusercontent.com/BVLC/caffe/master/examples/cifar10/cifar10_full_solver.prototxt", "solver.prototxt") + urllib.request.urlretrieve("https://raw.githubusercontent.com/BVLC/caffe/master/examples/cifar10/cifar10_full_train_test.prototxt", "train_test.prototxt") + urllib.request.urlretrieve("https://raw.githubusercontent.com/BVLC/caffe/master/examples/cifar10/cifar10_full_solver.prototxt", "solver.prototxt") input_sample_shape = [3, 32, 32, ] cvt = converter.CaffeConverter("train_test.prototxt", "solver.prototxt", @@ -32,6 +36,6 @@ def create_net(use_cpu): p.gaussian(filler.mean, filler.std) else: p.set_value(0) - print specs.name, filler.type, p.l1() + print(specs.name, filler.type, p.l1()) return net http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/c94b3dfd/examples/cifar10/download_data.py ---------------------------------------------------------------------- diff --git a/examples/cifar10/download_data.py b/examples/cifar10/download_data.py index 7129b03..a0b73c5 100755 --- a/examples/cifar10/download_data.py +++ b/examples/cifar10/download_data.py @@ -17,7 +17,10 @@ # limitations under the License. # -import urllib +from __future__ import print_function +from future import standard_library +standard_library.install_aliases() +import urllib.request, urllib.parse, urllib.error import tarfile import os import sys @@ -26,17 +29,17 @@ import argparse def extract_tarfile(filepath): if os.path.exists(filepath): - print 'The tar file does exist. Extracting it now..' + print('The tar file does exist. Extracting it now..') with tarfile.open(filepath, 'r') as f: f.extractall('.') - print 'Finished!' + print('Finished!') sys.exit(0) def check_dir_exist(dirpath): if os.path.exists(dirpath): - print 'Directory %s does exist. To redownload the files, '\ - 'remove the existing directory and %s.tar.gz' % (dirpath, dirpath) + print('Directory %s does exist. To redownload the files, '\ + 'remove the existing directory and %s.tar.gz' % (dirpath, dirpath)) return True else: return False @@ -45,10 +48,10 @@ def check_dir_exist(dirpath): def do_download(dirpath, gzfile, url): if check_dir_exist(dirpath): sys.exit(0) - print 'Downloading CIFAR10 from %s' % (url) - urllib.urlretrieve(url, gzfile) + print('Downloading CIFAR10 from %s' % (url)) + urllib.request.urlretrieve(url, gzfile) extract_tarfile(gzfile) - print 'Finished!' + print('Finished!') if __name__ == '__main__': http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/c94b3dfd/examples/cifar10/predict.py ---------------------------------------------------------------------- diff --git a/examples/cifar10/predict.py b/examples/cifar10/predict.py index dca44fe..123818a 100644 --- a/examples/cifar10/predict.py +++ b/examples/cifar10/predict.py @@ -15,7 +15,11 @@ # limitations under the License. # ============================================================================= '''Predicting the labels for new images using the pre-trained alexnet model''' -import cPickle as pickle +from __future__ import print_function +from future import standard_library +standard_library.install_aliases() +from builtins import range +import pickle as pickle import numpy as np # sys.path.append(os.path.join(os.path.dirname(__file__), '../../build/python')) @@ -46,7 +50,7 @@ def predict(net, images, dev, topk=5): def load_dataset(filepath): - print 'Loading data file %s' % filepath + print('Loading data file %s' % filepath) with open(filepath, 'rb') as fd: cifar10 = pickle.load(fd) image = cifar10['data'].astype(dtype=np.uint8) @@ -88,4 +92,4 @@ if __name__ == '__main__': mean = compute_image_mean('cifar-10-batches-py') test_images, _ = load_test_data('cifar-10-batches-py') # predict for two images - print predict(model, test_images[0:2] - mean, dev) + print(predict(model, test_images[0:2] - mean, dev)) http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/c94b3dfd/examples/cifar10/resnet.py ---------------------------------------------------------------------- diff --git a/examples/cifar10/resnet.py b/examples/cifar10/resnet.py index 6b573e9..4b9bad0 100644 --- a/examples/cifar10/resnet.py +++ b/examples/cifar10/resnet.py @@ -19,8 +19,12 @@ The best validation accuracy we achieved is about 83% without data augmentation. The performance could be improved by tuning some hyper-parameters, including learning rate, weight decay, max_epoch, parameter initialization, etc. """ +from __future__ import print_function +from future import standard_library +standard_library.install_aliases() +from builtins import zip -import cPickle as pickle +import pickle as pickle # sys.path.append(os.path.join(os.path.dirname(__file__), '../../build/python')) # use the python modules by installing py singa in build/python @@ -73,7 +77,7 @@ def create_net(use_cpu=False): net.add(layer.AvgPooling2D("pool4", 8, 8, border_mode='valid')) net.add(layer.Flatten('flat')) net.add(layer.Dense('ip5', 10)) - print 'Start intialization............' + print('Start intialization............') for (p, name) in zip(net.param_values(), net.param_names()): # print name, p.shape if 'mean' in name or 'beta' in name: http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/c94b3dfd/examples/cifar10/train.py ---------------------------------------------------------------------- diff --git a/examples/cifar10/train.py b/examples/cifar10/train.py index d54d694..8204055 100644 --- a/examples/cifar10/train.py +++ b/examples/cifar10/train.py @@ -18,8 +18,16 @@ It includes 5 binary dataset, each contains 10000 images. 1 row (1 image) includes 1 label & 3072 pixels. 3072 pixels are 3 channels of a 32x32 image """ - -import cPickle +from __future__ import division +from __future__ import print_function +from future import standard_library +standard_library.install_aliases() +from builtins import zip +from builtins import str +from builtins import range +from past.utils import old_div + +import pickle import numpy as np import os import argparse @@ -38,9 +46,9 @@ import resnet def load_dataset(filepath): - print 'Loading data file %s' % filepath + print('Loading data file %s' % filepath) with open(filepath, 'rb') as fd: - cifar10 = cPickle.load(fd) + cifar10 = pickle.load(fd) image = cifar10['data'].astype(dtype=np.uint8) image = image.reshape((-1, 3, 32, 32)) label = np.asarray(cifar10['labels'], dtype=np.uint8) @@ -85,7 +93,7 @@ def normalize_for_alexnet(train_x, test_x): def vgg_lr(epoch): - return 0.1 / float(1 << ((epoch / 25))) + return old_div(0.1, float(1 << ((old_div(epoch, 25))))) def alexnet_lr(epoch): @@ -115,12 +123,12 @@ def caffe_lr(epoch): def train(data, net, max_epoch, get_lr, weight_decay, batch_size=100, use_cpu=False): - print 'Start intialization............' + print('Start intialization............') if use_cpu: - print 'Using CPU' + print('Using CPU') dev = device.get_default_device() else: - print 'Using GPU' + print('Using GPU') dev = device.create_cuda_gpu() net.to_device(dev) @@ -131,13 +139,13 @@ def train(data, net, max_epoch, get_lr, weight_decay, batch_size=100, tx = tensor.Tensor((batch_size, 3, 32, 32), dev) ty = tensor.Tensor((batch_size,), dev, core_pb2.kInt) train_x, train_y, test_x, test_y = data - num_train_batch = train_x.shape[0] / batch_size - num_test_batch = test_x.shape[0] / batch_size + num_train_batch = old_div(train_x.shape[0], batch_size) + num_test_batch = old_div(test_x.shape[0], batch_size) idx = np.arange(train_x.shape[0], dtype=np.int32) for epoch in range(max_epoch): np.random.shuffle(idx) loss, acc = 0.0, 0.0 - print 'Epoch %d' % epoch + print('Epoch %d' % epoch) for b in range(num_train_batch): x = train_x[idx[b * batch_size: (b + 1) * batch_size]] y = train_y[idx[b * batch_size: (b + 1) * batch_size]] @@ -152,8 +160,8 @@ def train(data, net, max_epoch, get_lr, weight_decay, batch_size=100, utils.update_progress(b * 1.0 / num_train_batch, 'training loss = %f, accuracy = %f' % (l, a)) info = '\ntraining loss = %f, training accuracy = %f, lr = %f' \ - % (loss / num_train_batch, acc / num_train_batch, get_lr(epoch)) - print info + % (old_div(loss, num_train_batch), old_div(acc, num_train_batch), get_lr(epoch)) + print(info) loss, acc = 0.0, 0.0 for b in range(num_test_batch): @@ -165,8 +173,8 @@ def train(data, net, max_epoch, get_lr, weight_decay, batch_size=100, loss += l acc += a - print 'test loss = %f, test accuracy = %f' \ - % (loss / num_test_batch, acc / num_test_batch) + print('test loss = %f, test accuracy = %f' \ + % (old_div(loss, num_test_batch), old_div(acc, num_test_batch))) net.save('model', 20) # save model params into checkpoint file if __name__ == '__main__': @@ -178,7 +186,7 @@ if __name__ == '__main__': args = parser.parse_args() assert os.path.exists(args.data), \ 'Pls download the cifar10 dataset via "download_data.py py"' - print 'Loading data ..................' + print('Loading data ..................') train_x, train_y = load_train_data(args.data) test_x, test_y = load_test_data(args.data) if args.model == 'caffe': http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/c94b3dfd/examples/cifar10/vgg.py ---------------------------------------------------------------------- diff --git a/examples/cifar10/vgg.py b/examples/cifar10/vgg.py index ce0c210..ec893a9 100644 --- a/examples/cifar10/vgg.py +++ b/examples/cifar10/vgg.py @@ -19,6 +19,8 @@ The best validation accuracy we achieved is about 89% without data augmentation. The performance could be improved by tuning some hyper-parameters, including learning rate, weight decay, max_epoch, parameter initialization, etc. """ +from __future__ import print_function +from builtins import zip # sys.path.append(os.path.join(os.path.dirname(__file__), '../../build/python')) @@ -74,9 +76,9 @@ def create_net(use_cpu=False): net.add(layer.Activation('relu_ip1')) net.add(layer.Dropout('drop_ip2', 0.5)) net.add(layer.Dense('ip2', 10)) - print 'Start intialization............' + print('Start intialization............') for (p, name) in zip(net.param_values(), net.param_names()): - print name, p.shape + print(name, p.shape) if 'mean' in name or 'beta' in name: p.set_value(0.0) elif 'var' in name: @@ -90,6 +92,6 @@ def create_net(use_cpu=False): p.gaussian(0, 0.02) else: p.set_value(0) - print name, p.l1() + print(name, p.l1()) return net http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/c94b3dfd/examples/imagenet/googlenet/serve.py ---------------------------------------------------------------------- diff --git a/examples/imagenet/googlenet/serve.py b/examples/imagenet/googlenet/serve.py index aee890d..308acd6 100644 --- a/examples/imagenet/googlenet/serve.py +++ b/examples/imagenet/googlenet/serve.py @@ -17,6 +17,9 @@ ''' This model is created following Caffe implementation of GoogleNet https://github.com/BVLC/caffe/blob/master/models/bvlc_googlenet/ ''' +from __future__ import print_function +from builtins import zip +from builtins import str import os import sys import time @@ -157,14 +160,14 @@ def serve(agent, use_cpu, parameter_file, topk=5): dev = device.get_default_device() layer.engine = 'singacpp' else: - print "runing with gpu" + print("runing with gpu") dev = device.create_cuda_gpu() agent = agent - print 'Start intialization............' + print('Start intialization............') net = create_net((3, 224, 224), parameter_file) net.to_device(dev) - print 'End intialization............' + print('End intialization............') labels = np.loadtxt('synset_words.txt', str, delimiter='\t ') while True: @@ -199,15 +202,15 @@ def serve(agent, use_cpu, parameter_file, topk=5): response = "Sorry, system error during prediction." agent.push(MsgType.kResponse, response) elif MsgType.kCommandStop.equal(msg_type): - print 'get stop command' + print('get stop command') agent.push(MsgType.kStatus, "success") break else: - print 'get unsupported message %s' % str(msg_type) + print('get unsupported message %s' % str(msg_type)) agent.push(MsgType.kStatus, "Unknown command") break # while loop - print "server stop" + print("server stop") def main(): http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/c94b3dfd/examples/imagenet/resnet/convert.py ---------------------------------------------------------------------- diff --git a/examples/imagenet/resnet/convert.py b/examples/imagenet/resnet/convert.py index 042d2ec..7c98139 100644 --- a/examples/imagenet/resnet/convert.py +++ b/examples/imagenet/resnet/convert.py @@ -90,8 +90,7 @@ def traverse(m, idx, params, param_names): if __name__ == '__main__': parser = ArgumentParser(description='Convert params from torch to python ' - 'dict. \n resnet could have depth of 18, 34, 101, 152; \n - wrn has depth 50; preact has depth 200; addbn has depth 50') + 'dict. \n resnet could have depth of 18, 34, 101, 152; \n wrn has depth 50; preact has depth 200; addbn has depth 50') parser.add_argument("infile", help="torch checkpoint file") parser.add_argument("model", choices = ['resnet', 'wrn', 'preact', 'addbn']) parser.add_argument("depth", type=int, choices = [18, 34, 50, 101, 152, 200]) http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/c94b3dfd/examples/imagenet/resnet/model.py ---------------------------------------------------------------------- diff --git a/examples/imagenet/resnet/model.py b/examples/imagenet/resnet/model.py index bf90da3..6ab8741 100644 --- a/examples/imagenet/resnet/model.py +++ b/examples/imagenet/resnet/model.py @@ -17,6 +17,9 @@ ''' This models are created following https://github.com/facebook/fb.resnet.torch.git and https://github.com/szagoruyko/wide-residual-networks ''' +from __future__ import print_function +from builtins import zip +from builtins import range from singa.layer import Conv2D, Activation, MaxPooling2D, AvgPooling2D,\ Split, Merge, Flatten, Dense, BatchNormalization, Softmax from singa import net as ffnet @@ -139,7 +142,7 @@ def stage(sid, net, num_blk, inplane, midplane, outplane, stride, block, preact= def init_params(net, weight_path=None): if weight_path == None: for pname, pval in zip(net.param_names(), net.param_values()): - print pname, pval.shape + print(pname, pval.shape) if 'conv' in pname and len(pval.shape) > 1: initializer.gaussian(pval, 0, pval.shape[1]) elif 'dense' in pname: http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/c94b3dfd/examples/imagenet/resnet/serve.py ---------------------------------------------------------------------- diff --git a/examples/imagenet/resnet/serve.py b/examples/imagenet/resnet/serve.py index ba5adb1..fde06fe 100644 --- a/examples/imagenet/resnet/serve.py +++ b/examples/imagenet/resnet/serve.py @@ -1,3 +1,8 @@ +from __future__ import division +from __future__ import print_function +from builtins import str +from builtins import range +from past.utils import old_div # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information @@ -52,7 +57,7 @@ def predict(net, images, num=10): ''' prob = net.predict(images) prob = tensor.to_numpy(prob) - prob = prob.reshape((images.shape[0] / num, num, -1)) + prob = prob.reshape((old_div(images.shape[0], num), num, -1)) prob = np.average(prob, 1) return prob @@ -82,11 +87,11 @@ def serve(net, label_map, dev, agent, topk=5): try: # process images im = [np.array(x.convert('RGB'), dtype=np.float32).transpose(2, 0, 1) for x in image_transform(val['image'])] - im = np.array(im) / 256 + im = old_div(np.array(im), 256) im -= mean[np.newaxis, :, np.newaxis, np.newaxis] im /= std[np.newaxis, :, np.newaxis, np.newaxis] images.copy_from_numpy(im) - print "input: ", images.l1() + print("input: ", images.l1()) # do prediction prob = predict(net, images, num_augmentation)[0] idx = np.argsort(-prob) @@ -100,17 +105,17 @@ def serve(net, label_map, dev, agent, topk=5): agent.push(MsgType.kResponse, response) elif msg.is_command(): if MsgType.kCommandStop.equal(msg): - print 'get stop command' + print('get stop command') agent.push(MsgType.kStatus, "success") break else: - print 'get unsupported command %s' % str(msg) + print('get unsupported command %s' % str(msg)) agent.push(MsgType.kStatus, "Unknown command") else: - print 'get unsupported message %s' % str(msg) + print('get unsupported message %s' % str(msg)) agent.push(MsgType.kStatus, "unsupported msg; going to shutdown") break - print "server stop" + print("server stop") def main(): try: @@ -133,14 +138,14 @@ def main(): net = model.create_net(args.model, args.depth, args.use_cpu) if args.use_cpu: - print 'Using CPU' + print('Using CPU') dev = device.get_default_device() else: - print 'Using GPU' + print('Using GPU') dev = device.create_cuda_gpu() net.to_device(dev) model.init_params(net, args.parameter_file) - print 'Finish loading models' + print('Finish loading models') labels = np.loadtxt('synset_words.txt', str, delimiter='\t ') serve(net, labels, dev, agent) http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/c94b3dfd/examples/mnist/train.py ---------------------------------------------------------------------- diff --git a/examples/mnist/train.py b/examples/mnist/train.py index 0a00358..82d9a5a 100644 --- a/examples/mnist/train.py +++ b/examples/mnist/train.py @@ -1,3 +1,9 @@ +from __future__ import division +from __future__ import print_function +from future import standard_library +standard_library.install_aliases() +from builtins import range +from past.utils import old_div # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information @@ -19,7 +25,7 @@ import numpy as np import os import gzip import argparse -import cPickle +import pickle from singa import initializer from singa import utils from singa import optimizer @@ -33,16 +39,16 @@ from singa.proto import core_pb2 def load_train_data(file_path): f = gzip.open(file_path, 'rb') - train_set, valid_set, test_set = cPickle.load(f) + train_set, valid_set, test_set = pickle.load(f) traindata = train_set[0].astype(np.float32) validdata = valid_set[0].astype(np.float32) - print traindata.shape, validdata.shape + print(traindata.shape, validdata.shape) return traindata, validdata def train(data_file, use_gpu, num_epoch=10, batch_size=100): - print 'Start intialization............' + print('Start intialization............') lr = 0.1 # Learning rate weight_decay = 0.0002 hdim = 1000 @@ -55,7 +61,7 @@ def train(data_file, use_gpu, num_epoch=10, batch_size=100): thbias = tensor.from_numpy(np.zeros(hdim, dtype = np.float32)) opt = optimizer.SGD(momentum=0.5, weight_decay=weight_decay) - print 'Loading data ..................' + print('Loading data ..................') train_x, valid_x = load_train_data(data_file) if use_gpu: @@ -66,11 +72,11 @@ def train(data_file, use_gpu, num_epoch=10, batch_size=100): for t in [tweight, tvbias, thbias]: t.to_device(dev) - num_train_batch = train_x.shape[0] / batch_size - print "num_train_batch = %d " % (num_train_batch) + num_train_batch = old_div(train_x.shape[0], batch_size) + print("num_train_batch = %d " % (num_train_batch)) for epoch in range(num_epoch): trainerrorsum = 0.0 - print 'Epoch %d' % epoch + print('Epoch %d' % epoch) for b in range(num_train_batch): # positive phase tdata = tensor.from_numpy( @@ -99,11 +105,11 @@ def train(data_file, use_gpu, num_epoch=10, batch_size=100): tgvbias = tensor.sum(tnegdata, 0) - tensor.sum(tdata, 0) tghbias = tensor.sum(tneghidprob, 0) - tensor.sum(tposhidprob, 0) - opt.apply_with_lr(epoch, lr / batch_size, tgweight, tweight, 'w') - opt.apply_with_lr(epoch, lr / batch_size, tgvbias, tvbias, 'vb') - opt.apply_with_lr(epoch, lr / batch_size, tghbias, thbias, 'hb') + opt.apply_with_lr(epoch, old_div(lr, batch_size), tgweight, tweight, 'w') + opt.apply_with_lr(epoch, old_div(lr, batch_size), tgvbias, tvbias, 'vb') + opt.apply_with_lr(epoch, old_div(lr, batch_size), tghbias, thbias, 'hb') - print 'training errorsum = %f' % (trainerrorsum) + print('training errorsum = %f' % (trainerrorsum)) tvaliddata = tensor.from_numpy(valid_x) tvaliddata.to_device(dev) @@ -119,7 +125,7 @@ def train(data_file, use_gpu, num_epoch=10, batch_size=100): tvalidnegdata = tensor.sigmoid(tvalidnegdata) validerrorsum = tensor.sum(tensor.square((tvaliddata - tvalidnegdata))) - print 'valid errorsum = %f' % (validerrorsum) + print('valid errorsum = %f' % (validerrorsum)) if __name__ == '__main__': http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/c94b3dfd/python/CMakeLists.txt ---------------------------------------------------------------------- diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 177326e..01396ff 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -93,8 +93,15 @@ PROTOBUF_GENERATE_PYTHON(proto_pys ${proto_files}) file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/python/singa/proto) file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/python/rafiki) file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/src/api) + +IF(PYTHON2) + SET(SWIG_PYTHON3 "") +ELSE() + SET(SWIG_PYTHON3 "-py3") +ENDIF() + execute_process( - COMMAND swig -c++ -python -I${CMAKE_SOURCE_DIR}/include + COMMAND swig -c++ -python ${SWIG_PYTHON3} -I${CMAKE_SOURCE_DIR}/include -outdir ${CMAKE_BINARY_DIR}/python/singa -o ${CMAKE_BINARY_DIR}/src/api/singa_wrap.cxx ${CMAKE_SOURCE_DIR}/src/api/singa.i) http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/c94b3dfd/python/rafiki/agent.py ---------------------------------------------------------------------- diff --git a/python/rafiki/agent.py b/python/rafiki/agent.py index d9e4e7a..98d9b01 100644 --- a/python/rafiki/agent.py +++ b/python/rafiki/agent.py @@ -1,3 +1,5 @@ +from builtins import str +from builtins import object # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information @@ -25,7 +27,7 @@ from werkzeug.datastructures import CombinedMultiDict, MultiDict import pickle import uuid -class MsgType: +class MsgType(object): def __init__(self, name): self.name = name def __str__(self): @@ -72,7 +74,7 @@ for t in types: app = Flask(__name__) top_k_=5 -class Agent(): +class Agent(object): def __init__(self,port): info_queue = Queue() @@ -203,7 +205,7 @@ def failure(message): def transformFile(files): result= MultiDict([]) - for f in files.keys(): + for f in list(files.keys()): file = files[f] unique_filename = str(uuid.uuid4())+secure_filename(file.filename) filepath=os.path.join(os.getcwd(),unique_filename) @@ -212,7 +214,7 @@ def transformFile(files): return result def deleteFiles(files): - for f in files.keys(): + for f in list(files.keys()): filepath = files[f] os.remove(filepath) #print "remove",filepath http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/c94b3dfd/python/singa/layer.py ---------------------------------------------------------------------- diff --git a/python/singa/layer.py b/python/singa/layer.py index 2cdfe69..153768b 100644 --- a/python/singa/layer.py +++ b/python/singa/layer.py @@ -50,12 +50,11 @@ from __future__ import absolute_import from builtins import str from builtins import range from builtins import object -from sets import Set +from builtins import set from . import singa_wrap from .proto import model_pb2 from . import tensor - engine = 'cudnn' '''engine is the prefix of layer identifier. @@ -1048,7 +1047,7 @@ class RNN(Layer): conf = self.conf.rnn_conf assert hidden_size > 0, 'Hidden feature size must > 0' conf.hidden_size = hidden_size - assert rnn_mode in Set(['lstm', 'gru', 'tanh', 'relu']), \ + assert rnn_mode in set(['lstm', 'gru', 'tanh', 'relu']), \ 'rnn mode %s is not available' % (rnn_mode) conf.rnn_mode = rnn_mode conf.num_stacks = num_stacks @@ -1164,7 +1163,7 @@ class GRU(RNN): def _check_engine(engine, allowed_engines): - assert engine.lower() in Set(allowed_engines), \ + assert engine.lower() in set(allowed_engines), \ '%s is not a supported engine. Pls use one of %s' % \ (engine, ', '.join(allowed_engines)) @@ -1181,7 +1180,7 @@ def _create_layer(eng, layer): assert eng != 'cudnn' or cudnn_version > 0, 'CUDNN is not enabled, please '\ 'change the engine, e.g., layer.engine=singacpp' layer_type = eng + '_' + layer - return singa_wrap.CreateLayer(layer_type.lower()) + return singa_wrap.CreateLayer(layer_type.lower().encode()) def _set_kernel_stride_pad(conf, kernel, stride, border_mode, pad, in_shape): http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/c94b3dfd/python/singa/loss.py ---------------------------------------------------------------------- diff --git a/python/singa/loss.py b/python/singa/loss.py index d643218..800a113 100644 --- a/python/singa/loss.py +++ b/python/singa/loss.py @@ -41,7 +41,7 @@ from __future__ import absolute_import from past.utils import old_div from builtins import object from . import singa_wrap as singa -from proto import model_pb2 +from .proto import model_pb2 from . import tensor import numpy as np http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/c94b3dfd/python/singa/optimizer.py ---------------------------------------------------------------------- diff --git a/python/singa/optimizer.py b/python/singa/optimizer.py index 8f1fe8e..54b81e8 100644 --- a/python/singa/optimizer.py +++ b/python/singa/optimizer.py @@ -39,8 +39,7 @@ from builtins import object import math from . import singa_wrap as singa from . import tensor -from proto import model_pb2 - +from .proto import model_pb2 class Optimizer(object): '''The base python optimizer class. @@ -205,7 +204,7 @@ class SGD(Optimizer): if self.momentum is not None: conf.momentum = self.momentum conf.type = 'sgd' - self.opt = singa.CreateOptimizer('SGD') + self.opt = singa.CreateOptimizer('SGD'.encode()) self.opt.Setup(conf.SerializeToString()) def apply_with_lr(self, epoch, lr, grad, value, name, step=-1): @@ -214,7 +213,7 @@ class SGD(Optimizer): grad = self.apply_regularizer_constraint(epoch, value, grad, name, step) if name is not None and name in self.learning_rate_multiplier: lr = lr * self.learning_rate_multiplier[name] - self.opt.Apply(epoch, lr, name, grad.singa_tensor, value.singa_tensor) + self.opt.Apply(epoch, lr, name.encode(), grad.singa_tensor, value.singa_tensor) return value @@ -232,7 +231,7 @@ class Nesterov(Optimizer): if self.momentum is not None: conf.momentum = momentum conf.type = 'nesterov' - self.opt = singa.CreateOptimizer('Nesterov') + self.opt = singa.CreateOptimizer('Nesterov'.encode()) self.opt.Setup(conf.SerializeToString()) def apply_with_lr(self, epoch, lr, grad, value, name, step=-1): @@ -242,7 +241,7 @@ class Nesterov(Optimizer): grad = self.apply_regularizer_constraint(epoch, value, grad, name, step) if name is not None and name in self.learning_rate_multiplier: lr = lr * self.learning_rate_multiplier[name] - self.opt.Apply(epoch, lr, name, grad.singa_tensor, value.singa_tensor) + self.opt.Apply(epoch, lr, name.encode(), grad.singa_tensor, value.singa_tensor) return value @@ -263,7 +262,7 @@ class RMSProp(Optimizer): conf = model_pb2.OptimizerConf() conf.rho = rho conf.delta = epsilon - self.opt = singa.CreateOptimizer('RMSProp') + self.opt = singa.CreateOptimizer('RMSProp'.encode()) self.opt.Setup(conf.SerializeToString()) def apply_with_lr(self, epoch, lr, grad, value, name, step=-1): @@ -273,7 +272,7 @@ class RMSProp(Optimizer): grad = self.apply_regularizer_constraint(epoch, value, grad, name, step) if name is not None and name in self.learning_rate_multiplier: lr = lr * self.learning_rate_multiplier[name] - self.opt.Apply(step, lr, name, grad.singa_tensor, value.singa_tensor) + self.opt.Apply(step, lr, name.encode(), grad.singa_tensor, value.singa_tensor) return value @@ -293,7 +292,7 @@ class AdaGrad(Optimizer): conf = model_pb2.OptimizerConf() conf.delta = epsilon conf.type = 'adagrad' - self.opt = singa.CreateOptimizer('AdaGrad') + self.opt = singa.CreateOptimizer('AdaGrad'.encode()) self.opt.Setup(conf.SerializeToString()) def apply_with_lr(self, epoch, lr, grad, value, name, step=-1): @@ -303,7 +302,7 @@ class AdaGrad(Optimizer): grad = self.apply_regularizer_constraint(epoch, value, grad, name, step) if name is not None and name in self.learning_rate_multiplier: lr = lr * self.learning_rate_multiplier[name] - self.opt.Apply(epoch, lr, name, grad.singa_tensor, value.singa_tensor) + self.opt.Apply(epoch, lr, name.encode(), grad.singa_tensor, value.singa_tensor) return value http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/c94b3dfd/python/singa/snapshot.py ---------------------------------------------------------------------- diff --git a/python/singa/snapshot.py b/python/singa/snapshot.py index 4c359fc..392ab3d 100644 --- a/python/singa/snapshot.py +++ b/python/singa/snapshot.py @@ -49,7 +49,7 @@ class Snapshot(object): mode (boolean): True for write, False for read buffer_size (int): Buffer size (in MB), default is 10 ''' - self.snapshot = singa.Snapshot(f, mode, buffer_size) + self.snapshot = singa.Snapshot(f.encode(), mode, buffer_size) def write(self, param_name, param_val): '''Call Write method to write a parameter @@ -58,7 +58,7 @@ class Snapshot(object): param_name (string): name of the parameter param_val (Tensor): value tensor of the parameter ''' - self.snapshot.Write(str(param_name), param_val.singa_tensor) + self.snapshot.Write(str(param_name).encode(), param_val.singa_tensor) def read(self): '''Call read method to load all (param_name, param_val) http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/c94b3dfd/python/singa/tensor.py ---------------------------------------------------------------------- diff --git a/python/singa/tensor.py b/python/singa/tensor.py index fabd84a..144ed61 100644 --- a/python/singa/tensor.py +++ b/python/singa/tensor.py @@ -423,6 +423,14 @@ class Tensor(object): return _call_singa_func(singa.DivFloat, self.singa_tensor, rhs) + def __truediv__(self, rhs): + if isinstance(rhs, Tensor): + return from_raw_tensor( + singa.__div__(self.singa_tensor, rhs.singa_tensor)) + else: + return _call_singa_func(singa.DivFloat, + self.singa_tensor, rhs) + def __lt__(self, rhs): if isinstance(rhs, Tensor): return from_raw_tensor( @@ -479,6 +487,13 @@ class Tensor(object): one /= self return one + def __rtruediv__(self, lhs): + lhs = float(lhs) + one = Tensor(self.shape, self.device, self.dtype) + one.set_value(lhs) + one /= self + return one + ''' python functions for global functions in Tensor.h ''' @@ -938,7 +953,7 @@ def div(lhs, rhs, ret=None): ''' if ret is None: # call Tensor.__div__() - return old_div(lhs, rhs) + return lhs / rhs else: if isinstance(rhs, Tensor): singa.Div(lhs.singa_tensor, rhs.singa_tensor, ret.singa_tensor) http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/c94b3dfd/src/api/model_layer.i ---------------------------------------------------------------------- diff --git a/src/api/model_layer.i b/src/api/model_layer.i index 92919fd..4760da3 100644 --- a/src/api/model_layer.i +++ b/src/api/model_layer.i @@ -29,6 +29,7 @@ %{ +#define SWIG_PYTHON_STRICT_BYTE_CHAR #include "singa/model/layer.h" #include "../src/model/layer/rnn.h" #include "../src/model/layer/cudnn_rnn.h" http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/c94b3dfd/src/api/model_optimizer.i ---------------------------------------------------------------------- diff --git a/src/api/model_optimizer.i b/src/api/model_optimizer.i index 793df28..9b73d81 100644 --- a/src/api/model_optimizer.i +++ b/src/api/model_optimizer.i @@ -28,6 +28,7 @@ %include "std_shared_ptr.i" %{ +#define SWIG_PYTHON_STRICT_BYTE_CHAR #include "singa/model/optimizer.h" #include "singa/proto/model.pb.h" using singa::Tensor; http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/c94b3dfd/test/python/test_layer.py ---------------------------------------------------------------------- diff --git a/test/python/test_layer.py b/test/python/test_layer.py index c0f19f3..ec5becf 100644 --- a/test/python/test_layer.py +++ b/test/python/test_layer.py @@ -1,3 +1,4 @@ +from builtins import str # # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/c94b3dfd/test/python/test_loss.py ---------------------------------------------------------------------- diff --git a/test/python/test_loss.py b/test/python/test_loss.py index 78356f2..eb06b81 100644 --- a/test/python/test_loss.py +++ b/test/python/test_loss.py @@ -1,3 +1,5 @@ +from __future__ import division +from past.utils import old_div # # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file @@ -45,7 +47,7 @@ class TestLoss(unittest.TestCase): sig.backward() l2 = sig.evaluate(True, self.x, self.y) - p = 1.0 / (1 + np.exp(-self.x_np)) + p = old_div(1.0, (1 + np.exp(-self.x_np))) l = - (self.y_np * np.log(p) + (1-self.y_np) * np.log(1-p)) self.assertAlmostEqual(l1.l1(), l2) self.assertAlmostEqual(l1.l1(), np.average(l)) http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/c94b3dfd/test/python/test_metric.py ---------------------------------------------------------------------- diff --git a/test/python/test_metric.py b/test/python/test_metric.py index e7a51c3..8a22372 100644 --- a/test/python/test_metric.py +++ b/test/python/test_metric.py @@ -1,3 +1,5 @@ +from __future__ import division +from past.utils import old_div # # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file @@ -50,7 +52,7 @@ class TestPrecision(unittest.TestCase): def test_evaluate(self): e = self.prcs.evaluate(self.x,self.y) - self.assertAlmostEqual(e, (0.5 + 1 + 0) / 3) + self.assertAlmostEqual(e, old_div((0.5 + 1 + 0), 3)) class TestRecall(unittest.TestCase): def setUp(self): @@ -72,13 +74,13 @@ class TestRecall(unittest.TestCase): def test_forward(self): r = self.recall.forward(self.x,self.y) self.assertAlmostEqual(tensor.to_numpy(r)[0], 0.5) - self.assertAlmostEqual(tensor.to_numpy(r)[1], 2.0 / 3) + self.assertAlmostEqual(tensor.to_numpy(r)[1], old_div(2.0, 3)) self.assertAlmostEqual(tensor.to_numpy(r)[2], 0) def test_evaluate(self): e = self.recall.evaluate(self.x,self.y) - self.assertAlmostEqual(e, (0.5 + 2.0 / 3 + 0) / 3) + self.assertAlmostEqual(e, old_div((0.5 + old_div(2.0, 3) + 0), 3)) if __name__ == '__main__': unittest.main() http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/c94b3dfd/test/python/test_net.py ---------------------------------------------------------------------- diff --git a/test/python/test_net.py b/test/python/test_net.py index b19d868..afabc0d 100644 --- a/test/python/test_net.py +++ b/test/python/test_net.py @@ -1,3 +1,6 @@ +from __future__ import division +from builtins import zip +from past.utils import old_div # # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file @@ -41,7 +44,7 @@ class TestFeedForwardNet(unittest.TestCase): y.set_value(0) out, _ = ffn.evaluate(x, y) self.assertAlmostEqual(out * 3, - - math.log(1.0/(1+math.exp(1))) - + - math.log(old_div(1.0,(1+math.exp(1)))) - math.log(0.5) - math.log(0.5), 5) http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/c94b3dfd/test/python/test_optimizer.py ---------------------------------------------------------------------- diff --git a/test/python/test_optimizer.py b/test/python/test_optimizer.py index cfd13c0..11374f5 100644 --- a/test/python/test_optimizer.py +++ b/test/python/test_optimizer.py @@ -1,3 +1,7 @@ +from __future__ import division +from builtins import zip +from builtins import range +from past.utils import old_div # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information @@ -106,7 +110,7 @@ class TestOptimizer(unittest.TestCase): cons = opt.L2Constraint(threshold) cons.apply(0, self.W, self.g) g = tensor.to_numpy(self.g) - nrm = np.linalg.norm(self.np_g) / self.np_g.size + nrm = old_div(np.linalg.norm(self.np_g), self.np_g.size) for i in range(g.size): self.assertAlmostEqual(g[i], self.np_g[i] * threshold / nrm) @@ -118,7 +122,7 @@ class TestOptimizer(unittest.TestCase): cons.apply(0, self.W, self.g) self.g.to_host() g = tensor.to_numpy(self.g) - nrm = np.linalg.norm(self.np_g) / self.np_g.size + nrm = old_div(np.linalg.norm(self.np_g), self.np_g.size) for i in range(g.size): self.assertAlmostEqual(g[i], self.np_g[i] * threshold / nrm) http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/c94b3dfd/test/python/test_tensor.py ---------------------------------------------------------------------- diff --git a/test/python/test_tensor.py b/test/python/test_tensor.py index 9cd2411..3f86899 100644 --- a/test/python/test_tensor.py +++ b/test/python/test_tensor.py @@ -1,3 +1,5 @@ +from __future__ import division +from past.utils import old_div # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information @@ -150,7 +152,7 @@ class TestTensorMethods(unittest.TestCase): def test_rdiv(self): x = tensor.Tensor((3,)) x.set_value(1) - y = 2 / x + y = old_div(2, x) self.assertEqual(tensor.average(y), 2.) def test_numpy_convert(self): http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/c94b3dfd/tool/debian/postinst ---------------------------------------------------------------------- diff --git a/tool/debian/postinst b/tool/debian/postinst index 2d63734..433ca49 100644 --- a/tool/debian/postinst +++ b/tool/debian/postinst @@ -16,6 +16,6 @@ # limitations under the License. # -pip install /usr/local/lib/singa/python +pip3 install /usr/local/lib/singa/python rm -r /usr/local/lib/singa http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/c94b3dfd/tool/opencl/clsrc_to_str.py ---------------------------------------------------------------------- diff --git a/tool/opencl/clsrc_to_str.py b/tool/opencl/clsrc_to_str.py index 24400f7..8ca94a0 100755 --- a/tool/opencl/clsrc_to_str.py +++ b/tool/opencl/clsrc_to_str.py @@ -57,7 +57,7 @@ if __name__ == "__main__": fout.write(license) fout.write("#include <string>\n\n") fout.write("namespace singa {\n namespace opencl {\n") - for name, path in files.items(): + for name, path in list(files.items()): with open(path, 'r') as fin: src = fin.read() src = repr(src)
