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/14f0d8cd Tree: http://git-wip-us.apache.org/repos/asf/incubator-singa/tree/14f0d8cd Diff: http://git-wip-us.apache.org/repos/asf/incubator-singa/diff/14f0d8cd Branch: refs/heads/master Commit: 14f0d8cdf6b85928681e434fb1984615b773c3c0 Parents: e5c438c Author: Moaz Reyad <[email protected]> Authored: Sat May 27 14:32:31 2017 +0800 Committer: Wei Wang <[email protected]> Committed: Thu Aug 3 18:15:59 2017 +0800 ---------------------------------------------------------------------- CMakeLists.txt | 38 +++++++++++++++++++++++++++----------- cmake/Dependencies.cmake | 11 ++++++++--- python/setup.py.in | 6 ++++-- python/singa/command.py | 24 ++++++++++++++---------- python/singa/converter.py | 12 ++++++++---- python/singa/data.py | 14 +++++++++----- python/singa/device.py | 1 + python/singa/image_tool.py | 24 ++++++++++++++---------- python/singa/initializer.py | 8 +++++--- python/singa/layer.py | 9 +++++++-- python/singa/loss.py | 8 ++++++-- python/singa/metric.py | 11 ++++++++--- python/singa/net.py | 27 +++++++++++++++++---------- python/singa/optimizer.py | 8 ++++++-- python/singa/snapshot.py | 5 ++++- python/singa/tensor.py | 15 ++++++++++----- tool/debian-python2/postinst | 21 +++++++++++++++++++++ 17 files changed, 169 insertions(+), 73 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/14f0d8cd/CMakeLists.txt ---------------------------------------------------------------------- diff --git a/CMakeLists.txt b/CMakeLists.txt index f71ce69..0522f61 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -122,13 +122,13 @@ IF (USE_MODULES) #ENDIF() ExternalProject_Add(protobuf DOWNLOAD_COMMAND "wget" - "http://github.com/google/protobuf/releases/download/v2.6.1/protobuf-2.6.1.tar.gz" - "-O" "protobuf-2.6.1.tar.gz" + "https://github.com/google/protobuf/archive/v3.3.0.tar.gz" + "-O" "protobuf-3.3.0.tar.gz" UPDATE_COMMAND "tar" "zxvf" - "${CMAKE_BINARY_DIR}/protobuf-prefix/src/protobuf-2.6.1.tar.gz" "-C" ".." - SOURCE_DIR "protobuf-2.6.1/" + "${CMAKE_BINARY_DIR}/protobuf-prefix/src/protobuf-3.3.0.tar.gz" "-C" ".." + SOURCE_DIR "protobuf-3.3.0/" BUILD_IN_SOURCE 1 - CONFIGURE_COMMAND "./configure" "--disable-shared" + CONFIGURE_COMMAND "./autogen.sh" COMMAND "./configure" "--disable-shared" "--prefix=${CMAKE_BINARY_DIR}/" "CXXFLAGS=-fPIC" INSTALL_COMMAND "make" "install" ) @@ -192,7 +192,11 @@ IF(PACKAGE) SET(CORE_DEPENDENCIES "libgoogle-glog-dev, libprotobuf-dev, libopenblas-dev, libstdc++6, libc6") ENDIF() - SET(PYTHON_DEPENDENCIES "${CORE_DEPENDENCIES}, python-dev, libpython2.7, python-pip, python-numpy, python-pillow") + IF(PYTHON2) + SET(PYTHON_DEPENDENCIES "${CORE_DEPENDENCIES}, python-dev, libpython2.7, python-pip, python-numpy, python-pillow") + ELSE() + SET(PYTHON_DEPENDENCIES "${CORE_DEPENDENCIES}, python3, python3-dev, python3-pip, python3-numpy, python3-pillow") + ENDIF() SET(CPACK_GENERATOR "DEB") SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "Apache Incubator <[email protected]>") @@ -206,12 +210,24 @@ IF(PACKAGE) SET(CPACK_DEBIAN_PACKAGE_DEPENDS ${PYTHON_DEPENDENCIES}) SET(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${PROJECT_SOURCE_DIR}/tool/debian/postinst" ) SET(CPACK_DEBIAN_PACKAGE_PREDEPENDS "ca-certificates") - IF (USE_CUDA) - SET(CPACK_DEBIAN_PACKAGE_NAME "python-singa-cuda") - SET(CPACK_PACKAGE_FILE_NAME "python-singa-cuda-${PACKAGE_VERSION}") + IF(PYTHON2) + SET(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${PROJECT_SOURCE_DIR}/tool/debian-python2/postinst" ) + IF (USE_CUDA) + SET(CPACK_DEBIAN_PACKAGE_NAME "python-singa-cuda") + SET(CPACK_PACKAGE_FILE_NAME "python-singa-cuda-${PACKAGE_VERSION}") + ELSE() + SET(CPACK_DEBIAN_PACKAGE_NAME "python-singa") + SET(CPACK_PACKAGE_FILE_NAME "python-singa-${PACKAGE_VERSION}") + ENDIF() ELSE() - SET(CPACK_DEBIAN_PACKAGE_NAME "python-singa") - SET(CPACK_PACKAGE_FILE_NAME "python-singa-${PACKAGE_VERSION}") + SET(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${PROJECT_SOURCE_DIR}/tool/debian/postinst" ) + IF (USE_CUDA) + SET(CPACK_DEBIAN_PACKAGE_NAME "python3-singa-cuda") + SET(CPACK_PACKAGE_FILE_NAME "python3-singa-cuda-${PACKAGE_VERSION}") + ELSE() + SET(CPACK_DEBIAN_PACKAGE_NAME "python3-singa") + SET(CPACK_PACKAGE_FILE_NAME "python3-singa-${PACKAGE_VERSION}") + ENDIF() ENDIF() ELSE() SET(CPACK_DEBIAN_PACKAGE_NAME "singa") http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/14f0d8cd/cmake/Dependencies.cmake ---------------------------------------------------------------------- diff --git a/cmake/Dependencies.cmake b/cmake/Dependencies.cmake index 83c5187..aa3c090 100644 --- a/cmake/Dependencies.cmake +++ b/cmake/Dependencies.cmake @@ -51,7 +51,7 @@ IF(USE_MODULES) #ENDIF() #ENDIF() ELSE() - FIND_PACKAGE( Protobuf REQUIRED ) + FIND_PACKAGE( Protobuf 3.0 REQUIRED ) #MESSAGE(STATUS "proto libs " ${PROTOBUF_LIBRARY}) LIST(APPEND SINGA_LINKER_LIBS ${PROTOBUF_LIBRARY}) #IF(USE_CBLAS) @@ -124,8 +124,13 @@ ENDIF() #MESSAGE(STATUS "link lib : " ${SINGA_LINKER_LIBS}) IF(USE_PYTHON) - FIND_PACKAGE(PythonLibs 2.7 REQUIRED) - FIND_PACKAGE(PythonInterp 2.7 REQUIRED) + IF(PYTHON2) + FIND_PACKAGE(PythonLibs 2.7 REQUIRED) + FIND_PACKAGE(PythonInterp 2.7 REQUIRED) + ELSE() + FIND_PACKAGE(PythonLibs 3.0 REQUIRED) + FIND_PACKAGE(PythonInterp 3.0 REQUIRED) + ENDIF() FIND_PACKAGE(SWIG 3.0 REQUIRED) ENDIF() http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/14f0d8cd/python/setup.py.in ---------------------------------------------------------------------- diff --git a/python/setup.py.in b/python/setup.py.in index 6b3e5b5..044710f 100644 --- a/python/setup.py.in +++ b/python/setup.py.in @@ -50,6 +50,7 @@ setup( 'Programming Language :: Python :: 2', 'Programming Language :: Python :: 2.6', 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3', ], keywords='deep learning singa apache', @@ -60,11 +61,12 @@ setup( install_requires=[ 'numpy>=1.11.0', - 'protobuf>=2.5.0', + 'protobuf>=3', 'unittest-xml-reporting', 'flask>=0.10.1', 'flask_cors>=3.0.2', - 'pillow>=2.3.0' + 'pillow>=2.3.0', + 'future' ], #List additional groups of dependencies here (e.g. development http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/14f0d8cd/python/singa/command.py ---------------------------------------------------------------------- diff --git a/python/singa/command.py b/python/singa/command.py index f14c8c5..90c51cc 100644 --- a/python/singa/command.py +++ b/python/singa/command.py @@ -21,12 +21,16 @@ This script is the main entrance for user to run singa inside a model workspace To use this script, user sudo install these dependencies: flask pillow and protobuf ''' +from __future__ import print_function +from future import standard_library +standard_library.install_aliases() +from builtins import str import sys, glob, os, random, shutil, time from flask import Flask, request, redirect, url_for import numpy as np -import ConfigParser -import urllib, traceback +import configparser +import urllib.request, urllib.parse, urllib.error, traceback from argparse import ArgumentParser @@ -42,7 +46,7 @@ welcome to singa ''' app = Flask(__name__) -config = ConfigParser.RawConfigParser() +config = configparser.RawConfigParser() service = {} data_path = "data_" parameter_path = "parameter_" @@ -123,19 +127,19 @@ USAGE parameter_file=get_parameter(parameter_file) if parameter_file: - print "load parameter file: %s" % parameter_file + print("load parameter file: %s" % parameter_file) model.load(parameter_file) if use_cpu: raise CLIError("Currently cpu is not support!") else: - print "runing with gpu" + print("runing with gpu") d = device.create_cuda_gpu() model.to_device(d) if mode == "serve": - print "runing singa in serve mode, listen to port: %s " % port + print("runing singa in serve mode, listen to port: %s " % port) global service from serve import Service service =Service(model,d) @@ -143,7 +147,7 @@ USAGE app.debug = debug app.run(host='0.0.0.0', port= port) elif mode == "train": - print "runing singa in train mode" + print("runing singa in train mode") global trainer from train import Trainer trainer= Trainer(model,d) @@ -156,7 +160,7 @@ USAGE except KeyboardInterrupt: ### handle keyboard interrupt ### return 0 - except Exception, e: + except Exception as e: if debug: traceback.print_exc() raise(e) @@ -172,7 +176,7 @@ def file_prepare(reload_data=False): if not reload_data and os.path.exists("data_.py"): return - print "download file" + print("download file") #clean data shutil.rmtree("data_.py",ignore_errors=True) shutil.rmtree("data_",ignore_errors=True) @@ -203,7 +207,7 @@ def download_file(name,path,dest): if (path.startswith('http')): file_name = path.split('/')[-1] target = os.path.join(dest,file_name) - urllib.urlretrieve(path,target) + urllib.request.urlretrieve(path,target) return name,target http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/14f0d8cd/python/singa/converter.py ---------------------------------------------------------------------- diff --git a/python/singa/converter.py b/python/singa/converter.py index cc42ef0..dc195f2 100644 --- a/python/singa/converter.py +++ b/python/singa/converter.py @@ -15,6 +15,10 @@ # limitations under the License. # ============================================================================= +from __future__ import print_function +from builtins import str +from builtins import range +from builtins import object from google.protobuf import text_format from singa import layer from singa import metric @@ -25,7 +29,7 @@ from .proto import caffe_pb2 import numpy as np -class CaffeConverter: +class CaffeConverter(object): def __init__(self, net_proto, solver_proto = None, input_sample_shape = None, param_path = None): @@ -158,9 +162,9 @@ class CaffeConverter: layer.engine = self.convert_engine(layer_confs[i], 0) lyr = layer.Layer(conf.name, conf) if len(net.layers) == 0: - print 'input sample shape: ', self.input_sample_shape + print('input sample shape: ', self.input_sample_shape) lyr.setup(self.input_sample_shape) - print lyr.name, lyr.get_output_sample_shape() + print(lyr.name, lyr.get_output_sample_shape()) if layer_confs[i].type == 'InnerProduct' or layer_confs[i].type == 14: net.add(layer.Flatten('flat' + str(flatten_id))) flatten_id += 1 @@ -226,4 +230,4 @@ class CaffeConverter: i += 1 params[i].copy_from_numpy(bias) i += 1 - print 'converting layer {0}, wmat shape = {1}, bias shape = {2}'.format(layer.name, w.shape, bias.shape) + print('converting layer {0}, wmat shape = {1}, bias shape = {2}'.format(layer.name, w.shape, bias.shape)) http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/14f0d8cd/python/singa/data.py ---------------------------------------------------------------------- diff --git a/python/singa/data.py b/python/singa/data.py index 492d218..753edbf 100644 --- a/python/singa/data.py +++ b/python/singa/data.py @@ -48,7 +48,11 @@ Example usage:: img.save('img%d.png' % idx) data.end() ''' +from __future__ import print_function +from __future__ import absolute_import +from builtins import range +from builtins import object import os import random import time @@ -56,7 +60,7 @@ from multiprocessing import Process, Queue import numpy as np -class ImageBatchIter: +class ImageBatchIter(object): '''Utility for iterating over an image dataset to get mini-batches. Args: @@ -97,7 +101,7 @@ class ImageBatchIter: self.p.start() return - def next(self): + def __next__(self): assert self.p is not None, 'call start before next' while self.queue.empty(): time.sleep(0.1) @@ -164,7 +168,7 @@ class ImageBatchIter: if __name__ == '__main__': - import image_tool + from . import image_tool from PIL import Image tool = image_tool.ImageTool() @@ -179,8 +183,8 @@ if __name__ == '__main__': image_folder='images/', capacity=10) data.start() - imgs, labels = data.next() - print labels + imgs, labels = next(data) + print(labels) for idx in range(imgs.shape[0]): img = Image.fromarray(imgs[idx].astype(np.uint8).transpose(1, 2, 0), 'RGB') http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/14f0d8cd/python/singa/device.py ---------------------------------------------------------------------- diff --git a/python/singa/device.py b/python/singa/device.py index fdd2a92..a1625e2 100644 --- a/python/singa/device.py +++ b/python/singa/device.py @@ -22,6 +22,7 @@ to call singa::Device and its methods. TODO(wangwei) implement py CudaGPU class. ''' +from builtins import object from . import singa_wrap as singa http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/14f0d8cd/python/singa/image_tool.py ---------------------------------------------------------------------- diff --git a/python/singa/image_tool.py b/python/singa/image_tool.py index ed865f1..529f73b 100644 --- a/python/singa/image_tool.py +++ b/python/singa/image_tool.py @@ -28,7 +28,11 @@ Example usage:: img.save('%d.png' % idx) ''' +from __future__ import division +from builtins import range +from builtins import object +from past.utils import old_div import random import numpy as np from PIL import Image, ImageEnhance @@ -69,7 +73,7 @@ def crop(img, patch, position): elif position == 'right_bottom': left, upper = img.size[0]-patch[0], img.size[1]-patch[1] elif position == 'center': - left, upper = (img.size[0]-patch[0])/2, (img.size[1]-patch[1])/2 + left, upper = old_div((img.size[0]-patch[0]),2), old_div((img.size[1]-patch[1]),2) else: raise Exception('position is wrong') @@ -92,8 +96,8 @@ def crop_and_resize(img, patch, position): left, upper = 0, 0 right, bottom = size[1], size[1] elif position == 'center': - left, upper = (size[0]-size[1])/2, 0 - right, bottom = (size[0]+size[1])/2, size[1] + left, upper = old_div((size[0]-size[1]),2), 0 + right, bottom = old_div((size[0]+size[1]),2), size[1] elif position == 'right': left, upper = size[0]-size[1], 0 right, bottom = size[0], size[1] @@ -101,8 +105,8 @@ def crop_and_resize(img, patch, position): left, upper = 0, 0 right, bottom = size[0], size[0] elif position == 'middle': - left, upper = 0, (size[1]-size[0])/2 - right, bottom = size[0], (size[1]+size[0])/2 + left, upper = 0, old_div((size[1]-size[0]),2) + right, bottom = size[0], old_div((size[1]+size[0]),2) elif position == 'bottom': left, upper = 0, size[1]-size[0] right, bottom = size[0], size[1] @@ -192,10 +196,10 @@ def flip_down(img): def get_list_sample(l, sample_size): - return [l[i] for i in sorted(random.sample(xrange(len(l)), sample_size))] + return [l[i] for i in sorted(random.sample(range(len(l)), sample_size))] -class ImageTool(): +class ImageTool(object): '''A tool for image augmentation. For operations with inplace=True, the returned value is the ImageTool @@ -238,7 +242,7 @@ class ImageTool(): rng: a tuple (begin,end), include begin, exclude end inplace: inplace imgs or not ( return new_imgs) ''' - size_list = range(rng[0], rng[1]) + size_list = list(range(rng[0], rng[1])) return self.resize_by_list(size_list, 1, inplace) def resize_by_list(self, size_list, num_case=1, inplace=True): @@ -273,7 +277,7 @@ class ImageTool(): rng: a tuple (begin,end) in degree, include begin, exclude end inplace: inplace imgs or not ( return new_imgs) ''' - angle_list = range(rng[0], rng[1]) + angle_list = list(range(rng[0], rng[1])) return self.rotate_by_list(angle_list, 1, inplace) def rotate_by_list(self, angle_list, num_case=1, inplace=True): @@ -391,7 +395,7 @@ class ImageTool(): if num_case == patch5 + patch3: count = patch5 else: - sample_list = range(0, patch5 + patch3) + sample_list = list(range(0, patch5 + patch3)) samples = get_list_sample(sample_list, num_case) count = 0 for s in samples: http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/14f0d8cd/python/singa/initializer.py ---------------------------------------------------------------------- diff --git a/python/singa/initializer.py b/python/singa/initializer.py index fb99663..5d5f31e 100644 --- a/python/singa/initializer.py +++ b/python/singa/initializer.py @@ -26,7 +26,9 @@ Example usages:: initializer.uniform(x, 3, 5) # use both fan_in and fan_out initializer.uniform(x, 3, 0) # use only fan_in ''' +from __future__ import division +from past.utils import old_div import math @@ -89,7 +91,7 @@ def xavier(t): t (Tensor): the parater tensor ''' - scale = math.sqrt(6.0 / (t.shape[0] + t.shape[1])) + scale = math.sqrt(old_div(6.0, (t.shape[0] + t.shape[1]))) t.uniform(-scale, scale) @@ -102,7 +104,7 @@ def glorot(t): Args: t (Tensor): the parater tensor ''' - scale = math.sqrt(2.0 / (t.shape[0] + t.shape[1])) + scale = math.sqrt(old_div(2.0, (t.shape[0] + t.shape[1]))) t.gaussian(0, 1) t *= scale @@ -119,4 +121,4 @@ def msra(t): Args: t (Tensor): the parater tensor ''' - t.gaussian(0, math.sqrt(2.0 / t.shape[0])) + t.gaussian(0, math.sqrt(old_div(2.0, t.shape[0]))) http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/14f0d8cd/python/singa/layer.py ---------------------------------------------------------------------- diff --git a/python/singa/layer.py b/python/singa/layer.py index 026a766..2cdfe69 100644 --- a/python/singa/layer.py +++ b/python/singa/layer.py @@ -44,11 +44,16 @@ Example usages:: # dp is a list of tensors for parameter gradients dx, dp = conv.backward(kTrain, dy) """ +from __future__ import division +from __future__ import absolute_import +from builtins import str +from builtins import range +from builtins import object from sets import Set from . import singa_wrap from .proto import model_pb2 -import tensor +from . import tensor engine = 'cudnn' @@ -1217,7 +1222,7 @@ def _set_kernel_stride_pad(conf, kernel, stride, border_mode, pad, in_shape): 0) assert ph % 2 == 0 and pw % 2 == 0, 'ph=%d and pw=%d are not even' \ % (ph, pw) - pad = (ph / 2, pw / 2) + pad = (ph // 2, pw // 2) elif mode == 'valid': pad = (0, 0) else: http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/14f0d8cd/python/singa/loss.py ---------------------------------------------------------------------- diff --git a/python/singa/loss.py b/python/singa/loss.py index 7fd3d77..d643218 100644 --- a/python/singa/loss.py +++ b/python/singa/loss.py @@ -34,11 +34,15 @@ Example usage:: l = f.forward(True, x, y) # l is tensor with 3 loss values g = f.backward() # g is a tensor containing all gradients of x w.r.t l ''' +from __future__ import division +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 -import tensor +from . import tensor import numpy as np @@ -210,4 +214,4 @@ class SquaredError(Loss): Returns: a float value as the averaged error ''' - return tensor.sum(tensor.square(x - y) * 0.5) / x.size() + return old_div(tensor.sum(tensor.square(x - y) * 0.5), x.size()) http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/14f0d8cd/python/singa/metric.py ---------------------------------------------------------------------- diff --git a/python/singa/metric.py b/python/singa/metric.py index 64a1b72..8495c0c 100644 --- a/python/singa/metric.py +++ b/python/singa/metric.py @@ -34,10 +34,15 @@ Example usage:: acc = f.evaluate(x, y) # averaged accuracy over all 3 samples in x ''' +from __future__ import division +from __future__ import absolute_import +from builtins import range +from past.utils import old_div +from builtins import object from . import singa_wrap as singa -import tensor +from . import tensor import numpy as np @@ -129,7 +134,7 @@ class Precision(Metric): #Num of common labels among prediction and groundtruth num_intersect = np.intersect1d(pred_np[i], label_np).size - prcs_np[i] = num_intersect / float(self.top_k) + prcs_np[i] = old_div(num_intersect, float(self.top_k)) precision = tensor.from_numpy(prcs_np) @@ -192,7 +197,7 @@ class Recall(Metric): #Num of common labels among prediction and groundtruth num_intersect = np.intersect1d(pred_np[i], label_np).size - recall_np[i] = float(num_intersect) / label_np.size + recall_np[i] = old_div(float(num_intersect), label_np.size) recall = tensor.from_numpy(recall_np) http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/14f0d8cd/python/singa/net.py ---------------------------------------------------------------------- diff --git a/python/singa/net.py b/python/singa/net.py index faaef2b..c49b9fa 100644 --- a/python/singa/net.py +++ b/python/singa/net.py @@ -53,13 +53,20 @@ Example usages:: y = net.predict(x) print tensor.to_numpy(y) """ - +from __future__ import print_function +from __future__ import absolute_import + +from future import standard_library +standard_library.install_aliases() +from builtins import zip +from builtins import str +from builtins import object from .proto.model_pb2 import kTrain, kEval -from __init__ import __version__ -import tensor -import layer -import snapshot -import cPickle as pickle +from .__init__ import __version__ +from . import tensor +from . import layer +from . import snapshot +import pickle as pickle import os @@ -137,7 +144,7 @@ class FeedForwardNet(object): else: self.out_sample_shape_of_layer[lyr.name] = [out_shape] self.layers.append(lyr) - print(lyr.name, out_shape) + print((lyr.name, out_shape)) return lyr def param_values(self): @@ -334,7 +341,7 @@ class FeedForwardNet(object): # print output_of_layer ret.update(output_of_layer) if len(ret) == 1: - return ret.values()[0] + return list(ret.values())[0] else: return ret @@ -494,6 +501,6 @@ class FeedForwardNet(object): val.copy_from_numpy(params[name]) except AssertionError as err: print('Error from copying values for param: %s' % name) - print('shape of param vs checkpoint', - val.shape, params[name].shape) + print(('shape of param vs checkpoint', + val.shape, params[name].shape)) raise err http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/14f0d8cd/python/singa/optimizer.py ---------------------------------------------------------------------- diff --git a/python/singa/optimizer.py b/python/singa/optimizer.py index 614fe6d..8f1fe8e 100644 --- a/python/singa/optimizer.py +++ b/python/singa/optimizer.py @@ -31,10 +31,14 @@ Example usage:: sgd.apply(1, g, p, 'param') # use the global lr=0.1 for epoch 1 sgd.apply_with_lr(2, 0.03, g, p, 'param') # use lr=0.03 for epoch 2 ''' +from __future__ import division +from __future__ import absolute_import +from past.utils import old_div +from builtins import object import math from . import singa_wrap as singa -import tensor +from . import tensor from proto import model_pb2 @@ -434,5 +438,5 @@ class L2Constraint(Constraint): def apply(self, epoch, value, grad, step=-1): nrm = grad.l2() - grad *= self.threshold / nrm + grad *= old_div(self.threshold, nrm) return grad http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/14f0d8cd/python/singa/snapshot.py ---------------------------------------------------------------------- diff --git a/python/singa/snapshot.py b/python/singa/snapshot.py index 3e1298f..4c359fc 100644 --- a/python/singa/snapshot.py +++ b/python/singa/snapshot.py @@ -29,9 +29,12 @@ Example usages:: for k, v in params.iteritems(): sn2.write(k, v) ''' +from __future__ import absolute_import +from builtins import str +from builtins import object from . import singa_wrap as singa -import tensor +from . import tensor class Snapshot(object): http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/14f0d8cd/python/singa/tensor.py ---------------------------------------------------------------------- diff --git a/python/singa/tensor.py b/python/singa/tensor.py index d36abdc..fabd84a 100644 --- a/python/singa/tensor.py +++ b/python/singa/tensor.py @@ -53,12 +53,17 @@ Tensor module functions Every Tesor instance must be initialized before reading data from it. """ +from __future__ import division +from __future__ import print_function +from __future__ import absolute_import +from past.utils import old_div +from builtins import object import numpy as np from functools import reduce from .proto import core_pb2 from . import singa_wrap as singa -import device as pydevice +from . import device as pydevice int32 = core_pb2.kInt float32 = core_pb2.kFloat32 @@ -214,7 +219,7 @@ class Tensor(object): elif dt == np.int or dt == np.int32: self.singa_tensor.CopyIntDataFromHostPtr(np_array) else: - print 'Not implemented yet for ', dt + print('Not implemented yet for ', dt) def copy_data(self, t): '''Copy data from other Tensor instance. @@ -584,7 +589,7 @@ def to_numpy(t): elif th.dtype == core_pb2.kInt: np_array = th.singa_tensor.GetIntValue(int(th.size())) else: - print 'Not implemented yet for ', th.dtype + print('Not implemented yet for ', th.dtype) return np_array.reshape(th.shape) @@ -746,7 +751,7 @@ def average(t, axis=None): if t.ndim() > 1: return _call_singa_func(singa.Average, t.singa_tensor, axis) else: - return singa.SumAsFloat(t.singa_tensor) / t.size() + return old_div(singa.SumAsFloat(t.singa_tensor), t.size()) def softmax(t, out=None): @@ -933,7 +938,7 @@ def div(lhs, rhs, ret=None): ''' if ret is None: # call Tensor.__div__() - return lhs / rhs + return old_div(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/14f0d8cd/tool/debian-python2/postinst ---------------------------------------------------------------------- diff --git a/tool/debian-python2/postinst b/tool/debian-python2/postinst new file mode 100644 index 0000000..2d63734 --- /dev/null +++ b/tool/debian-python2/postinst @@ -0,0 +1,21 @@ +#!/bin/bash +# 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 +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +pip install /usr/local/lib/singa/python +rm -r /usr/local/lib/singa +
