You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@singa.apache.org by mo...@apache.org on 2018/05/18 04:52:19 UTC

[13/14] incubator-singa git commit: SINGA-349 Create layer operations for autograd

SINGA-349 Create layer operations for autograd

A cnn example for new designed API.
it works well in my computer


Project: http://git-wip-us.apache.org/repos/asf/incubator-singa/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-singa/commit/8146852c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-singa/tree/8146852c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-singa/diff/8146852c

Branch: refs/heads/master
Commit: 8146852c715555eb968b9e1414c6a8d82c22b7bd
Parents: f70f120
Author: xuewanqi <36...@users.noreply.github.com>
Authored: Tue May 8 16:55:34 2018 +0800
Committer: Wang Wei <dc...@nus.edu.sg>
Committed: Thu May 17 21:19:07 2018 +0800

----------------------------------------------------------------------
 examples/autograd/mnist.py     | 116 ------------------------------------
 examples/autograd/mnist_cnn.py |  60 ++++++++-----------
 2 files changed, 24 insertions(+), 152 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/8146852c/examples/autograd/mnist.py
----------------------------------------------------------------------
diff --git a/examples/autograd/mnist.py b/examples/autograd/mnist.py
deleted file mode 100644
index e488bac..0000000
--- a/examples/autograd/mnist.py
+++ /dev/null
@@ -1,116 +0,0 @@
-import numpy as np
-from singa import convolution_operation as layer_ops
-from singa import tensor
-from singa import autograd
-from singa import optimizer
-
-
-def load_data(path):
-    f = np.load(path)
-    x_train, y_train = f['x_train'], f['y_train']
-    x_test, y_test = f['x_test'], f['y_test']
-    f.close()
-    return (x_train, y_train), (x_test, y_test)
-
-def to_categorical(y, num_classes):
-    '''
-    Converts a class vector (integers) to binary class matrix.
-
-    Args
-        y: class vector to be converted into a matrix
-            (integers from 0 to num_classes).
-        num_classes: total number of classes.
-
-    Return
-        A binary matrix representation of the input.
-    '''
-    y = np.array(y, dtype='int')
-    n = y.shape[0]
-    categorical = np.zeros((n, num_classes))
-    categorical[np.arange(n), y] = 1
-    categorical=categorical.astype(np.float32)
-    return categorical
-
-def preprocess(data):
-    data=data.astype(np.float32)
-    data /= 255
-    data=np.expand_dims(data, axis=1)
-    return data
-
-def accuracy(pred,target):
-    y = np.argmax(pred, axis=1)
-    t = np.argmax(target, axis=1)
-    a = y == t
-    return np.array(a, 'int').sum() / float(len(t))
-
-
-if __name__ == '__main__':
-
-    batch_number=600
-    num_classes = 10
-    epochs = 1
-
-    sgd = optimizer.SGD(0.05)
-    #opt = optimizer.SGD(momentum=0.9, weight_decay=1e-4)
-
-    train,test=load_data('/Users/wanqixue/Downloads/mnist.npz')
-    x_train=preprocess(train[0])
-    y_train = to_categorical(train[1], num_classes)
-
-    x_test=preprocess(test[0])
-    y_test=to_categorical(test[1],num_classes)
-    print 'the shape of training data is',x_train.shape
-    print 'the shape of training label is',y_train.shape
-    print 'the shape of testing data is', x_test.shape
-    print 'the shape of testing label is', y_test.shape
-
-
-    conv1=layer_ops.Convolution2D('conv1',32,3,1,border_mode='same')
-    conv2=layer_ops.Convolution2D('conv2',32,3,1,border_mode='same')
-
-    #operations can create when call
-    relu1=layer_ops.Activation('relu1')
-    relu2 = layer_ops.Activation('relu2')
-    pooling= layer_ops.MaxPooling2D('pooling',3,1,border_mode='same')
-    flatten=layer_ops.Flatten('flatten')
-    matmul=tensor.Matmul()
-    add_bias=tensor.AddBias()
-    softmax=tensor.SoftMax()
-    cross_entropy=tensor.CrossEntropy()
-    #avoid repeat create operations
-
-    w = tensor.Tensor(shape=(25088, 10), requires_grad=True, stores_grad=True) #package a dense layer to calculate the shape automatically
-    w.gaussian(0.0, 0.1)
-
-    b = tensor.Tensor(shape=(1, 10), requires_grad=True, stores_grad=True)
-    b.set_value(0.0)
-
-    def forward(x,t):
-        y=conv1(x)[0]
-        y=relu1(y)[0]
-        y=conv2(y)[0]
-        y=relu2(y)[0]
-        y=pooling(y)[0]
-        y=flatten(y)[0]
-        y=matmul(y,w)[0]
-        y=add_bias(y,b)[0]
-        y=softmax(y)[0]
-        loss=cross_entropy(y,t)[0]
-        return loss, y
-
-    for epoch in range(epochs):
-        #for i in range(batch_number):
-        for i in range(50):
-            inputs = tensor.Tensor(data=x_train[i * 100:(1 + i) * 100, :], requires_grad=False, stores_grad=False)
-            targets = tensor.Tensor(data=y_train[i * 100:(1 + i) * 100, :], requires_grad=False, stores_grad=False)
-            loss, y = forward(inputs,targets)
-
-            accuracy_rate = accuracy(tensor.ctensor2numpy(y.data),tensor.ctensor2numpy(targets.data))
-            if (i % 5 == 0):
-                print 'accuracy is:', accuracy_rate,'loss is:', tensor.ctensor2numpy(loss.data)[0]
-
-            in_grads = autograd.backward(loss)
-
-            for param in in_grads:
-                sgd.apply(0, in_grads[param], param, '')
-

http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/8146852c/examples/autograd/mnist_cnn.py
----------------------------------------------------------------------
diff --git a/examples/autograd/mnist_cnn.py b/examples/autograd/mnist_cnn.py
index e488bac..79410e1 100644
--- a/examples/autograd/mnist_cnn.py
+++ b/examples/autograd/mnist_cnn.py
@@ -1,10 +1,11 @@
 import numpy as np
-from singa import convolution_operation as layer_ops
+
 from singa import tensor
 from singa import autograd
 from singa import optimizer
 
 
+
 def load_data(path):
     f = np.load(path)
     x_train, y_train = f['x_train'], f['y_train']
@@ -51,7 +52,6 @@ if __name__ == '__main__':
     epochs = 1
 
     sgd = optimizer.SGD(0.05)
-    #opt = optimizer.SGD(momentum=0.9, weight_decay=1e-4)
 
     train,test=load_data('/Users/wanqixue/Downloads/mnist.npz')
     x_train=preprocess(train[0])
@@ -59,31 +59,22 @@ if __name__ == '__main__':
 
     x_test=preprocess(test[0])
     y_test=to_categorical(test[1],num_classes)
-    print 'the shape of training data is',x_train.shape
-    print 'the shape of training label is',y_train.shape
-    print 'the shape of testing data is', x_test.shape
-    print 'the shape of testing label is', y_test.shape
-
-
-    conv1=layer_ops.Convolution2D('conv1',32,3,1,border_mode='same')
-    conv2=layer_ops.Convolution2D('conv2',32,3,1,border_mode='same')
+    print ('the shape of training data is',x_train.shape)
+    print ('the shape of training label is',y_train.shape)
+    print ('the shape of testing data is', x_test.shape)
+    print ('the shape of testing label is', y_test.shape)
+
+    # operations initialization
+    conv1=autograd.Conv2d(3,32)
+    relu1 = autograd.ReLU_Layer()  # same name for tensor.ReLU and layer_ops.ReLU
+    conv2=autograd.Conv2d(32,32)
+    relu2 = autograd.ReLU_Layer()
+    pooling = autograd.MaxPool2d()
+    flatten = autograd.Flatten()
+    linear = autograd.Linear(None, 10)  # in_feature=None for input_shape auto calculation
+    softmax = autograd.SoftMax()
+    cross_entropy = autograd.CrossEntropy()
 
-    #operations can create when call
-    relu1=layer_ops.Activation('relu1')
-    relu2 = layer_ops.Activation('relu2')
-    pooling= layer_ops.MaxPooling2D('pooling',3,1,border_mode='same')
-    flatten=layer_ops.Flatten('flatten')
-    matmul=tensor.Matmul()
-    add_bias=tensor.AddBias()
-    softmax=tensor.SoftMax()
-    cross_entropy=tensor.CrossEntropy()
-    #avoid repeat create operations
-
-    w = tensor.Tensor(shape=(25088, 10), requires_grad=True, stores_grad=True) #package a dense layer to calculate the shape automatically
-    w.gaussian(0.0, 0.1)
-
-    b = tensor.Tensor(shape=(1, 10), requires_grad=True, stores_grad=True)
-    b.set_value(0.0)
 
     def forward(x,t):
         y=conv1(x)[0]
@@ -92,25 +83,22 @@ if __name__ == '__main__':
         y=relu2(y)[0]
         y=pooling(y)[0]
         y=flatten(y)[0]
-        y=matmul(y,w)[0]
-        y=add_bias(y,b)[0]
+        y=linear(y)[0]
         y=softmax(y)[0]
-        loss=cross_entropy(y,t)[0]
+        loss=cross_entropy(y, t)[0]
         return loss, y
 
     for epoch in range(epochs):
-        #for i in range(batch_number):
-        for i in range(50):
+        for i in range(16):
             inputs = tensor.Tensor(data=x_train[i * 100:(1 + i) * 100, :], requires_grad=False, stores_grad=False)
             targets = tensor.Tensor(data=y_train[i * 100:(1 + i) * 100, :], requires_grad=False, stores_grad=False)
-            loss, y = forward(inputs,targets)
+            loss, y = forward(inputs, targets)
 
-            accuracy_rate = accuracy(tensor.ctensor2numpy(y.data),tensor.ctensor2numpy(targets.data))
+            accuracy_rate = accuracy(autograd.ctensor2numpy(y.data),autograd.ctensor2numpy(targets.data))
             if (i % 5 == 0):
-                print 'accuracy is:', accuracy_rate,'loss is:', tensor.ctensor2numpy(loss.data)[0]
+                print('accuracy is:', accuracy_rate,'loss is:', autograd.ctensor2numpy(loss.data)[0])
 
             in_grads = autograd.backward(loss)
 
             for param in in_grads:
-                sgd.apply(0, in_grads[param], param, '')
-
+                sgd.apply(0, in_grads[param], param, '')
\ No newline at end of file