[ 
https://issues.apache.org/jira/browse/SINGA-126?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15227950#comment-15227950
 ] 

ASF subversion and git services commented on SINGA-126:
-------------------------------------------------------

Commit 5a8fc3732e00372493ffdb1422db56da7f6e4876 in incubator-singa's branch 
refs/heads/master from chonho
[ https://git-wip-us.apache.org/repos/asf?p=incubator-singa.git;h=5a8fc37 ]

SINGA-126 Python Binding for Interactive Training

- revise Feed() function in dummy.cc
  . it now takes shape, data for input, aux_data for label
  . revised neuron_layer.h, driver.i

- add ImageInput() and LabelInput()
  . inherited from Dummy()
  . specific to image data and label data, respectively

- add compute_mean_image() method in train_cifar10.py
  . it loads 5 cifar10 datasets and computes the average image

- add Update() in model.py
  . it updates layer parameters


> Improve Python Binding for interactive training
> -----------------------------------------------
>
>                 Key: SINGA-126
>                 URL: https://issues.apache.org/jira/browse/SINGA-126
>             Project: Singa
>          Issue Type: Improvement
>            Reporter: wangwei
>            Assignee: Lee Chonho
>              Labels: binding, debugging, interative, python
>
> Currently, python APIs only configure the layer and model. All objects are 
> created after the the JobProto is passed to Driver. Hence, users cannot query 
> the layer object returned by
> {code}
> conv1 = Convolution2D()
> {code}
> to get its internal data (e.g, feature and param values). These internal data 
> is useful for debugging.
> To support this feature, we need to create the SINGA::Layer object and store 
> it in conv1.
> Users can write their own BP algorithm like this,
> {code}
> data = numpy.loadtxt("csv.txt")
> x, y = data[:, 1:], data[:, 0]
> input = Dummy() // dummy layer to get input data
> label = Dummy() // dummy layer to get label 
> conv = Convolution2D(...)
> pool = Pool2D()
> inner = Dense()
> loss = ...
> for i in range(x.shape[0] / batchsize):
>    xb, yb = ...
>    input.SetData(x)
>    label.SetData(y)
>    conv.ComputeFeature(input)
>    pool.ComputeFeature(conv)
>    inner.ComputeFeature(pool)
>    loss.ComputeGradient(inner, label)
>    ....
> {code}
> In this way, users know exactly how the training is conducted, and can access 
> the internal data of each layer directly, e.g., conv.data(), conv.GetParams().
> We may also learn from chainer to call the ComputeGradient functions 
> automatically for the backward pass.
> This feature requires the python APIs for singa::Layer.
> It is easy for training with a single worker. For multiple workers, we need 
> to think more.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to