You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mxnet.apache.org by TongKe Xue <tk...@tkxue.org> on 2017/10/18 23:10:38 UTC

mxnet Scala Convolution

Hi,

I am reading: https://mxnet.incubator.apache.org/api/scala/symbol.html

I see Symbol.Variable, Symbol.Convolution

When I look at Symbol.scala, I see Symbol.Variable at:
https://github.com/apache/incubator-mxnet/blob/master/scala-package/core/src/main/scala/ml/dmlc/mxnet/Symbol.scala#L982

However, I can't find where Convolution, SoftMax, FullyConnected, ...
are defined.

Where are these Symbols defined?

(I have also tried: grep "Convolution" . -R | grep scala | grep def --
but found nothing).

Thanks,
--TongKe

Re: mxnet Scala Convolution

Posted by TongKe Xue <tk...@tkxue.org>.
Hi YiZhi,

1. I will read out the function specs from reflection.

2. Thanks for confirming that "other routes are not possible" -- saves
me quite a bit of time searching.

--TongKe

On Thu, Oct 19, 2017 at 1:25 AM, YiZhi Liu <ja...@gmail.com> wrote:
> You can retrieve the functions/operators by reflection. Or, when
> compiling the scala package, it prints all operators out.
>
> 2017-10-19 8:15 GMT+00:00 YiZhi Liu <ja...@gmail.com>:
>> The javadoc cannot be added in this way. I'm afraid we have to write
>> another 'javadoc generator' for these operators.
>>
>> 2017-10-19 7:53 GMT+00:00 TongKe Xue <tk...@tkxue.org>:
>>> HI YiZhi,
>>>
>>>
>>> 1. I looked at:
>>> scala-package/macros/src/main/scala/ml/dmlc/mxnet/SymbolMacro.scala
>>> scala-package/macros/src/main/scala/ml/dmlc/mxnet/NDArrayMacro.scala
>>>
>>> These files appear to dynamically register nnvm functions into
>>> NDArray/Symbol right?
>>>
>>> I would like the "javadocs" of the dynamically added functions.
>>>
>>>
>>> 2. I looked at mxnet-macros_2.11-0.11.0-SNAPSHOT-javadoc.jar
>>>
>>> That jar looks mostly empty. Is that expected, or am I doing something wrong?
>>>
>>>
>>> 3. Currently, the best way I know for retrieving all the functions is
>>> to fire up a repl and run reflection. Is there a better method?
>>>
>>>
>>> Thanks,
>>> --TongKe
>>>
>>>
>>>
>>> On Wed, Oct 18, 2017 at 8:59 PM, YiZhi Liu <ja...@gmail.com> wrote:
>>>> Hi TongKe,
>>>>
>>>> The symbols you are looking for are auto-generated by scala macros.
>>>> Pls refer to scala-package/macros
>>>>
>>>> 2017-10-19 0:40 GMT+00:00 TongKe Xue <tk...@tkxue.org>:
>>>>> Hi Rahul,
>>>>>
>>>>>   Thanks for explaining the high level design + pointing to the
>>>>> implementation details.
>>>>>
>>>>>   Besides reading the C++ code and mentally translating the Scala
>>>>> calls, is there a way to get a list of all generated Scala functions?
>>>>>
>>>>>   I have looked at:
>>>>>
>>>>> 1. https://mxnet.incubator.apache.org/api/scala/symbol.html
>>>>> shows a few examples, but is not exhaustive
>>>>>
>>>>> 2. https://mxnet.incubator.apache.org/api/scala/docs/index.html#ml.dmlc.mxnet.Symbol
>>>>> appears more comprehensive, but I find neither Convolution nor Softmax there.
>>>>>
>>>>>
>>>>> More specifically, my question is: nnvm adds a bunch of Scala bindings
>>>>> to C++ code. How do I get a list of all these bindings (name, type of
>>>>> inputs, type of output).
>>>>>
>>>>>
>>>>> Thanks!
>>>>> --TongKe
>>>>>
>>>>>
>>>>> On Wed, Oct 18, 2017 at 5:28 PM, Rahul Huilgol <ra...@gmail.com> wrote:
>>>>>> Hi TongKe,
>>>>>>
>>>>>> These are operators defined in the c++ backend under src/operator. For
>>>>>> example convolution is here
>>>>>> https://github.com/apache/incubator-mxnet/blob/master/src/operator/convolution.cc
>>>>>> . The operators are registered using nnvm, which helps automatically
>>>>>> generate the frontend functions.
>>>>>>
>>>>>> This tutorial on how to add a backend operator
>>>>>> <https://github.com/apache/incubator-mxnet/blob/master/docs/how_to/add_op_in_backend.md>
>>>>>> contains information on how to register such operators, which would help
>>>>>> you understand the above file.
>>>>>> An excerpt from there (for quadratic operator) : "If you use python, when
>>>>>> you type import mxnet as mx, two python functions for invoking your backend
>>>>>> implementation are generated on the fly: one is for imperative programming
>>>>>> registered as mxnet.ndarray.quadratic or mx.nd.quadratic for short; the
>>>>>> other one is for symbolic programming registered under module
>>>>>> mxnet.symbol.quadratic or mx.sym.quadratic for short."
>>>>>>
>>>>>> I'd think the Scala package works similarly.
>>>>>>
>>>>>> Regards,
>>>>>> Rahul
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Wed, Oct 18, 2017 at 5:06 PM, TongKe Xue <tk...@tkxue.org> wrote:
>>>>>>
>>>>>>> My earlier question was a bit messy.
>>>>>>>
>>>>>>> To rephrase my question:
>>>>>>>
>>>>>>> 1. Scala AlexNet sample code calls Symbol.Convolution:
>>>>>>>
>>>>>>> https://github.com/apache/incubator-mxnet/blob/master/
>>>>>>> scala-package/examples/src/main/scala/ml/dmlc/mxnetexamples/visualization/
>>>>>>> AlexNet.scala#L30
>>>>>>>
>>>>>>> 2. Symbol.scala does not contain the string "Convolution"
>>>>>>>
>>>>>>> https://github.com/apache/incubator-mxnet/blob/master/
>>>>>>> scala-package/core/src/main/scala/ml/dmlc/mxnet/Symbol.scala#L982
>>>>>>>
>>>>>>> Question: where/how is Symbol.Convolution defined?
>>>>>>>
>>>>>>> On Wed, Oct 18, 2017 at 4:10 PM, TongKe Xue <tk...@tkxue.org> wrote:
>>>>>>> > Hi,
>>>>>>> >
>>>>>>> > I am reading: https://mxnet.incubator.apache.org/api/scala/symbol.html
>>>>>>> >
>>>>>>> > I see Symbol.Variable, Symbol.Convolution
>>>>>>> >
>>>>>>> > When I look at Symbol.scala, I see Symbol.Variable at:
>>>>>>> > https://github.com/apache/incubator-mxnet/blob/master/
>>>>>>> scala-package/core/src/main/scala/ml/dmlc/mxnet/Symbol.scala#L982
>>>>>>> >
>>>>>>> > However, I can't find where Convolution, SoftMax, FullyConnected, ...
>>>>>>> > are defined.
>>>>>>> >
>>>>>>> > Where are these Symbols defined?
>>>>>>> >
>>>>>>> > (I have also tried: grep "Convolution" . -R | grep scala | grep def --
>>>>>>> > but found nothing).
>>>>>>> >
>>>>>>> > Thanks,
>>>>>>> > --TongKe
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Rahul Huilgol
>>>>
>>>>
>>>>
>>>> --
>>>> Yizhi Liu
>>>> DMLC member
>>>> Technical Manager
>>>> Qihoo 360 Inc, Shanghai, China
>>
>>
>>
>> --
>> Yizhi Liu
>> DMLC member
>> Technical Manager
>> Qihoo 360 Inc, Shanghai, China
>
>
>
> --
> Yizhi Liu
> DMLC member
> Technical Manager
> Qihoo 360 Inc, Shanghai, China

Re: mxnet Scala Convolution

Posted by YiZhi Liu <ja...@gmail.com>.
You can retrieve the functions/operators by reflection. Or, when
compiling the scala package, it prints all operators out.

2017-10-19 8:15 GMT+00:00 YiZhi Liu <ja...@gmail.com>:
> The javadoc cannot be added in this way. I'm afraid we have to write
> another 'javadoc generator' for these operators.
>
> 2017-10-19 7:53 GMT+00:00 TongKe Xue <tk...@tkxue.org>:
>> HI YiZhi,
>>
>>
>> 1. I looked at:
>> scala-package/macros/src/main/scala/ml/dmlc/mxnet/SymbolMacro.scala
>> scala-package/macros/src/main/scala/ml/dmlc/mxnet/NDArrayMacro.scala
>>
>> These files appear to dynamically register nnvm functions into
>> NDArray/Symbol right?
>>
>> I would like the "javadocs" of the dynamically added functions.
>>
>>
>> 2. I looked at mxnet-macros_2.11-0.11.0-SNAPSHOT-javadoc.jar
>>
>> That jar looks mostly empty. Is that expected, or am I doing something wrong?
>>
>>
>> 3. Currently, the best way I know for retrieving all the functions is
>> to fire up a repl and run reflection. Is there a better method?
>>
>>
>> Thanks,
>> --TongKe
>>
>>
>>
>> On Wed, Oct 18, 2017 at 8:59 PM, YiZhi Liu <ja...@gmail.com> wrote:
>>> Hi TongKe,
>>>
>>> The symbols you are looking for are auto-generated by scala macros.
>>> Pls refer to scala-package/macros
>>>
>>> 2017-10-19 0:40 GMT+00:00 TongKe Xue <tk...@tkxue.org>:
>>>> Hi Rahul,
>>>>
>>>>   Thanks for explaining the high level design + pointing to the
>>>> implementation details.
>>>>
>>>>   Besides reading the C++ code and mentally translating the Scala
>>>> calls, is there a way to get a list of all generated Scala functions?
>>>>
>>>>   I have looked at:
>>>>
>>>> 1. https://mxnet.incubator.apache.org/api/scala/symbol.html
>>>> shows a few examples, but is not exhaustive
>>>>
>>>> 2. https://mxnet.incubator.apache.org/api/scala/docs/index.html#ml.dmlc.mxnet.Symbol
>>>> appears more comprehensive, but I find neither Convolution nor Softmax there.
>>>>
>>>>
>>>> More specifically, my question is: nnvm adds a bunch of Scala bindings
>>>> to C++ code. How do I get a list of all these bindings (name, type of
>>>> inputs, type of output).
>>>>
>>>>
>>>> Thanks!
>>>> --TongKe
>>>>
>>>>
>>>> On Wed, Oct 18, 2017 at 5:28 PM, Rahul Huilgol <ra...@gmail.com> wrote:
>>>>> Hi TongKe,
>>>>>
>>>>> These are operators defined in the c++ backend under src/operator. For
>>>>> example convolution is here
>>>>> https://github.com/apache/incubator-mxnet/blob/master/src/operator/convolution.cc
>>>>> . The operators are registered using nnvm, which helps automatically
>>>>> generate the frontend functions.
>>>>>
>>>>> This tutorial on how to add a backend operator
>>>>> <https://github.com/apache/incubator-mxnet/blob/master/docs/how_to/add_op_in_backend.md>
>>>>> contains information on how to register such operators, which would help
>>>>> you understand the above file.
>>>>> An excerpt from there (for quadratic operator) : "If you use python, when
>>>>> you type import mxnet as mx, two python functions for invoking your backend
>>>>> implementation are generated on the fly: one is for imperative programming
>>>>> registered as mxnet.ndarray.quadratic or mx.nd.quadratic for short; the
>>>>> other one is for symbolic programming registered under module
>>>>> mxnet.symbol.quadratic or mx.sym.quadratic for short."
>>>>>
>>>>> I'd think the Scala package works similarly.
>>>>>
>>>>> Regards,
>>>>> Rahul
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Wed, Oct 18, 2017 at 5:06 PM, TongKe Xue <tk...@tkxue.org> wrote:
>>>>>
>>>>>> My earlier question was a bit messy.
>>>>>>
>>>>>> To rephrase my question:
>>>>>>
>>>>>> 1. Scala AlexNet sample code calls Symbol.Convolution:
>>>>>>
>>>>>> https://github.com/apache/incubator-mxnet/blob/master/
>>>>>> scala-package/examples/src/main/scala/ml/dmlc/mxnetexamples/visualization/
>>>>>> AlexNet.scala#L30
>>>>>>
>>>>>> 2. Symbol.scala does not contain the string "Convolution"
>>>>>>
>>>>>> https://github.com/apache/incubator-mxnet/blob/master/
>>>>>> scala-package/core/src/main/scala/ml/dmlc/mxnet/Symbol.scala#L982
>>>>>>
>>>>>> Question: where/how is Symbol.Convolution defined?
>>>>>>
>>>>>> On Wed, Oct 18, 2017 at 4:10 PM, TongKe Xue <tk...@tkxue.org> wrote:
>>>>>> > Hi,
>>>>>> >
>>>>>> > I am reading: https://mxnet.incubator.apache.org/api/scala/symbol.html
>>>>>> >
>>>>>> > I see Symbol.Variable, Symbol.Convolution
>>>>>> >
>>>>>> > When I look at Symbol.scala, I see Symbol.Variable at:
>>>>>> > https://github.com/apache/incubator-mxnet/blob/master/
>>>>>> scala-package/core/src/main/scala/ml/dmlc/mxnet/Symbol.scala#L982
>>>>>> >
>>>>>> > However, I can't find where Convolution, SoftMax, FullyConnected, ...
>>>>>> > are defined.
>>>>>> >
>>>>>> > Where are these Symbols defined?
>>>>>> >
>>>>>> > (I have also tried: grep "Convolution" . -R | grep scala | grep def --
>>>>>> > but found nothing).
>>>>>> >
>>>>>> > Thanks,
>>>>>> > --TongKe
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Rahul Huilgol
>>>
>>>
>>>
>>> --
>>> Yizhi Liu
>>> DMLC member
>>> Technical Manager
>>> Qihoo 360 Inc, Shanghai, China
>
>
>
> --
> Yizhi Liu
> DMLC member
> Technical Manager
> Qihoo 360 Inc, Shanghai, China



-- 
Yizhi Liu
DMLC member
Technical Manager
Qihoo 360 Inc, Shanghai, China

Re: mxnet Scala Convolution

Posted by YiZhi Liu <ja...@gmail.com>.
You can retrieve the functions/operators by reflection. Or, when
compiling the scala package, it prints all operators out.

2017-10-19 8:15 GMT+00:00 YiZhi Liu <ja...@gmail.com>:
> The javadoc cannot be added in this way. I'm afraid we have to write
> another 'javadoc generator' for these operators.
>
> 2017-10-19 7:53 GMT+00:00 TongKe Xue <tk...@tkxue.org>:
>> HI YiZhi,
>>
>>
>> 1. I looked at:
>> scala-package/macros/src/main/scala/ml/dmlc/mxnet/SymbolMacro.scala
>> scala-package/macros/src/main/scala/ml/dmlc/mxnet/NDArrayMacro.scala
>>
>> These files appear to dynamically register nnvm functions into
>> NDArray/Symbol right?
>>
>> I would like the "javadocs" of the dynamically added functions.
>>
>>
>> 2. I looked at mxnet-macros_2.11-0.11.0-SNAPSHOT-javadoc.jar
>>
>> That jar looks mostly empty. Is that expected, or am I doing something wrong?
>>
>>
>> 3. Currently, the best way I know for retrieving all the functions is
>> to fire up a repl and run reflection. Is there a better method?
>>
>>
>> Thanks,
>> --TongKe
>>
>>
>>
>> On Wed, Oct 18, 2017 at 8:59 PM, YiZhi Liu <ja...@gmail.com> wrote:
>>> Hi TongKe,
>>>
>>> The symbols you are looking for are auto-generated by scala macros.
>>> Pls refer to scala-package/macros
>>>
>>> 2017-10-19 0:40 GMT+00:00 TongKe Xue <tk...@tkxue.org>:
>>>> Hi Rahul,
>>>>
>>>>   Thanks for explaining the high level design + pointing to the
>>>> implementation details.
>>>>
>>>>   Besides reading the C++ code and mentally translating the Scala
>>>> calls, is there a way to get a list of all generated Scala functions?
>>>>
>>>>   I have looked at:
>>>>
>>>> 1. https://mxnet.incubator.apache.org/api/scala/symbol.html
>>>> shows a few examples, but is not exhaustive
>>>>
>>>> 2. https://mxnet.incubator.apache.org/api/scala/docs/index.html#ml.dmlc.mxnet.Symbol
>>>> appears more comprehensive, but I find neither Convolution nor Softmax there.
>>>>
>>>>
>>>> More specifically, my question is: nnvm adds a bunch of Scala bindings
>>>> to C++ code. How do I get a list of all these bindings (name, type of
>>>> inputs, type of output).
>>>>
>>>>
>>>> Thanks!
>>>> --TongKe
>>>>
>>>>
>>>> On Wed, Oct 18, 2017 at 5:28 PM, Rahul Huilgol <ra...@gmail.com> wrote:
>>>>> Hi TongKe,
>>>>>
>>>>> These are operators defined in the c++ backend under src/operator. For
>>>>> example convolution is here
>>>>> https://github.com/apache/incubator-mxnet/blob/master/src/operator/convolution.cc
>>>>> . The operators are registered using nnvm, which helps automatically
>>>>> generate the frontend functions.
>>>>>
>>>>> This tutorial on how to add a backend operator
>>>>> <https://github.com/apache/incubator-mxnet/blob/master/docs/how_to/add_op_in_backend.md>
>>>>> contains information on how to register such operators, which would help
>>>>> you understand the above file.
>>>>> An excerpt from there (for quadratic operator) : "If you use python, when
>>>>> you type import mxnet as mx, two python functions for invoking your backend
>>>>> implementation are generated on the fly: one is for imperative programming
>>>>> registered as mxnet.ndarray.quadratic or mx.nd.quadratic for short; the
>>>>> other one is for symbolic programming registered under module
>>>>> mxnet.symbol.quadratic or mx.sym.quadratic for short."
>>>>>
>>>>> I'd think the Scala package works similarly.
>>>>>
>>>>> Regards,
>>>>> Rahul
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Wed, Oct 18, 2017 at 5:06 PM, TongKe Xue <tk...@tkxue.org> wrote:
>>>>>
>>>>>> My earlier question was a bit messy.
>>>>>>
>>>>>> To rephrase my question:
>>>>>>
>>>>>> 1. Scala AlexNet sample code calls Symbol.Convolution:
>>>>>>
>>>>>> https://github.com/apache/incubator-mxnet/blob/master/
>>>>>> scala-package/examples/src/main/scala/ml/dmlc/mxnetexamples/visualization/
>>>>>> AlexNet.scala#L30
>>>>>>
>>>>>> 2. Symbol.scala does not contain the string "Convolution"
>>>>>>
>>>>>> https://github.com/apache/incubator-mxnet/blob/master/
>>>>>> scala-package/core/src/main/scala/ml/dmlc/mxnet/Symbol.scala#L982
>>>>>>
>>>>>> Question: where/how is Symbol.Convolution defined?
>>>>>>
>>>>>> On Wed, Oct 18, 2017 at 4:10 PM, TongKe Xue <tk...@tkxue.org> wrote:
>>>>>> > Hi,
>>>>>> >
>>>>>> > I am reading: https://mxnet.incubator.apache.org/api/scala/symbol.html
>>>>>> >
>>>>>> > I see Symbol.Variable, Symbol.Convolution
>>>>>> >
>>>>>> > When I look at Symbol.scala, I see Symbol.Variable at:
>>>>>> > https://github.com/apache/incubator-mxnet/blob/master/
>>>>>> scala-package/core/src/main/scala/ml/dmlc/mxnet/Symbol.scala#L982
>>>>>> >
>>>>>> > However, I can't find where Convolution, SoftMax, FullyConnected, ...
>>>>>> > are defined.
>>>>>> >
>>>>>> > Where are these Symbols defined?
>>>>>> >
>>>>>> > (I have also tried: grep "Convolution" . -R | grep scala | grep def --
>>>>>> > but found nothing).
>>>>>> >
>>>>>> > Thanks,
>>>>>> > --TongKe
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Rahul Huilgol
>>>
>>>
>>>
>>> --
>>> Yizhi Liu
>>> DMLC member
>>> Technical Manager
>>> Qihoo 360 Inc, Shanghai, China
>
>
>
> --
> Yizhi Liu
> DMLC member
> Technical Manager
> Qihoo 360 Inc, Shanghai, China



-- 
Yizhi Liu
DMLC member
Technical Manager
Qihoo 360 Inc, Shanghai, China

Re: mxnet Scala Convolution

Posted by YiZhi Liu <ja...@gmail.com>.
The javadoc cannot be added in this way. I'm afraid we have to write
another 'javadoc generator' for these operators.

2017-10-19 7:53 GMT+00:00 TongKe Xue <tk...@tkxue.org>:
> HI YiZhi,
>
>
> 1. I looked at:
> scala-package/macros/src/main/scala/ml/dmlc/mxnet/SymbolMacro.scala
> scala-package/macros/src/main/scala/ml/dmlc/mxnet/NDArrayMacro.scala
>
> These files appear to dynamically register nnvm functions into
> NDArray/Symbol right?
>
> I would like the "javadocs" of the dynamically added functions.
>
>
> 2. I looked at mxnet-macros_2.11-0.11.0-SNAPSHOT-javadoc.jar
>
> That jar looks mostly empty. Is that expected, or am I doing something wrong?
>
>
> 3. Currently, the best way I know for retrieving all the functions is
> to fire up a repl and run reflection. Is there a better method?
>
>
> Thanks,
> --TongKe
>
>
>
> On Wed, Oct 18, 2017 at 8:59 PM, YiZhi Liu <ja...@gmail.com> wrote:
>> Hi TongKe,
>>
>> The symbols you are looking for are auto-generated by scala macros.
>> Pls refer to scala-package/macros
>>
>> 2017-10-19 0:40 GMT+00:00 TongKe Xue <tk...@tkxue.org>:
>>> Hi Rahul,
>>>
>>>   Thanks for explaining the high level design + pointing to the
>>> implementation details.
>>>
>>>   Besides reading the C++ code and mentally translating the Scala
>>> calls, is there a way to get a list of all generated Scala functions?
>>>
>>>   I have looked at:
>>>
>>> 1. https://mxnet.incubator.apache.org/api/scala/symbol.html
>>> shows a few examples, but is not exhaustive
>>>
>>> 2. https://mxnet.incubator.apache.org/api/scala/docs/index.html#ml.dmlc.mxnet.Symbol
>>> appears more comprehensive, but I find neither Convolution nor Softmax there.
>>>
>>>
>>> More specifically, my question is: nnvm adds a bunch of Scala bindings
>>> to C++ code. How do I get a list of all these bindings (name, type of
>>> inputs, type of output).
>>>
>>>
>>> Thanks!
>>> --TongKe
>>>
>>>
>>> On Wed, Oct 18, 2017 at 5:28 PM, Rahul Huilgol <ra...@gmail.com> wrote:
>>>> Hi TongKe,
>>>>
>>>> These are operators defined in the c++ backend under src/operator. For
>>>> example convolution is here
>>>> https://github.com/apache/incubator-mxnet/blob/master/src/operator/convolution.cc
>>>> . The operators are registered using nnvm, which helps automatically
>>>> generate the frontend functions.
>>>>
>>>> This tutorial on how to add a backend operator
>>>> <https://github.com/apache/incubator-mxnet/blob/master/docs/how_to/add_op_in_backend.md>
>>>> contains information on how to register such operators, which would help
>>>> you understand the above file.
>>>> An excerpt from there (for quadratic operator) : "If you use python, when
>>>> you type import mxnet as mx, two python functions for invoking your backend
>>>> implementation are generated on the fly: one is for imperative programming
>>>> registered as mxnet.ndarray.quadratic or mx.nd.quadratic for short; the
>>>> other one is for symbolic programming registered under module
>>>> mxnet.symbol.quadratic or mx.sym.quadratic for short."
>>>>
>>>> I'd think the Scala package works similarly.
>>>>
>>>> Regards,
>>>> Rahul
>>>>
>>>>
>>>>
>>>>
>>>> On Wed, Oct 18, 2017 at 5:06 PM, TongKe Xue <tk...@tkxue.org> wrote:
>>>>
>>>>> My earlier question was a bit messy.
>>>>>
>>>>> To rephrase my question:
>>>>>
>>>>> 1. Scala AlexNet sample code calls Symbol.Convolution:
>>>>>
>>>>> https://github.com/apache/incubator-mxnet/blob/master/
>>>>> scala-package/examples/src/main/scala/ml/dmlc/mxnetexamples/visualization/
>>>>> AlexNet.scala#L30
>>>>>
>>>>> 2. Symbol.scala does not contain the string "Convolution"
>>>>>
>>>>> https://github.com/apache/incubator-mxnet/blob/master/
>>>>> scala-package/core/src/main/scala/ml/dmlc/mxnet/Symbol.scala#L982
>>>>>
>>>>> Question: where/how is Symbol.Convolution defined?
>>>>>
>>>>> On Wed, Oct 18, 2017 at 4:10 PM, TongKe Xue <tk...@tkxue.org> wrote:
>>>>> > Hi,
>>>>> >
>>>>> > I am reading: https://mxnet.incubator.apache.org/api/scala/symbol.html
>>>>> >
>>>>> > I see Symbol.Variable, Symbol.Convolution
>>>>> >
>>>>> > When I look at Symbol.scala, I see Symbol.Variable at:
>>>>> > https://github.com/apache/incubator-mxnet/blob/master/
>>>>> scala-package/core/src/main/scala/ml/dmlc/mxnet/Symbol.scala#L982
>>>>> >
>>>>> > However, I can't find where Convolution, SoftMax, FullyConnected, ...
>>>>> > are defined.
>>>>> >
>>>>> > Where are these Symbols defined?
>>>>> >
>>>>> > (I have also tried: grep "Convolution" . -R | grep scala | grep def --
>>>>> > but found nothing).
>>>>> >
>>>>> > Thanks,
>>>>> > --TongKe
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Rahul Huilgol
>>
>>
>>
>> --
>> Yizhi Liu
>> DMLC member
>> Technical Manager
>> Qihoo 360 Inc, Shanghai, China



-- 
Yizhi Liu
DMLC member
Technical Manager
Qihoo 360 Inc, Shanghai, China

Re: mxnet Scala Convolution

Posted by TongKe Xue <tk...@tkxue.org>.
HI YiZhi,


1. I looked at:
scala-package/macros/src/main/scala/ml/dmlc/mxnet/SymbolMacro.scala
scala-package/macros/src/main/scala/ml/dmlc/mxnet/NDArrayMacro.scala

These files appear to dynamically register nnvm functions into
NDArray/Symbol right?

I would like the "javadocs" of the dynamically added functions.


2. I looked at mxnet-macros_2.11-0.11.0-SNAPSHOT-javadoc.jar

That jar looks mostly empty. Is that expected, or am I doing something wrong?


3. Currently, the best way I know for retrieving all the functions is
to fire up a repl and run reflection. Is there a better method?


Thanks,
--TongKe



On Wed, Oct 18, 2017 at 8:59 PM, YiZhi Liu <ja...@gmail.com> wrote:
> Hi TongKe,
>
> The symbols you are looking for are auto-generated by scala macros.
> Pls refer to scala-package/macros
>
> 2017-10-19 0:40 GMT+00:00 TongKe Xue <tk...@tkxue.org>:
>> Hi Rahul,
>>
>>   Thanks for explaining the high level design + pointing to the
>> implementation details.
>>
>>   Besides reading the C++ code and mentally translating the Scala
>> calls, is there a way to get a list of all generated Scala functions?
>>
>>   I have looked at:
>>
>> 1. https://mxnet.incubator.apache.org/api/scala/symbol.html
>> shows a few examples, but is not exhaustive
>>
>> 2. https://mxnet.incubator.apache.org/api/scala/docs/index.html#ml.dmlc.mxnet.Symbol
>> appears more comprehensive, but I find neither Convolution nor Softmax there.
>>
>>
>> More specifically, my question is: nnvm adds a bunch of Scala bindings
>> to C++ code. How do I get a list of all these bindings (name, type of
>> inputs, type of output).
>>
>>
>> Thanks!
>> --TongKe
>>
>>
>> On Wed, Oct 18, 2017 at 5:28 PM, Rahul Huilgol <ra...@gmail.com> wrote:
>>> Hi TongKe,
>>>
>>> These are operators defined in the c++ backend under src/operator. For
>>> example convolution is here
>>> https://github.com/apache/incubator-mxnet/blob/master/src/operator/convolution.cc
>>> . The operators are registered using nnvm, which helps automatically
>>> generate the frontend functions.
>>>
>>> This tutorial on how to add a backend operator
>>> <https://github.com/apache/incubator-mxnet/blob/master/docs/how_to/add_op_in_backend.md>
>>> contains information on how to register such operators, which would help
>>> you understand the above file.
>>> An excerpt from there (for quadratic operator) : "If you use python, when
>>> you type import mxnet as mx, two python functions for invoking your backend
>>> implementation are generated on the fly: one is for imperative programming
>>> registered as mxnet.ndarray.quadratic or mx.nd.quadratic for short; the
>>> other one is for symbolic programming registered under module
>>> mxnet.symbol.quadratic or mx.sym.quadratic for short."
>>>
>>> I'd think the Scala package works similarly.
>>>
>>> Regards,
>>> Rahul
>>>
>>>
>>>
>>>
>>> On Wed, Oct 18, 2017 at 5:06 PM, TongKe Xue <tk...@tkxue.org> wrote:
>>>
>>>> My earlier question was a bit messy.
>>>>
>>>> To rephrase my question:
>>>>
>>>> 1. Scala AlexNet sample code calls Symbol.Convolution:
>>>>
>>>> https://github.com/apache/incubator-mxnet/blob/master/
>>>> scala-package/examples/src/main/scala/ml/dmlc/mxnetexamples/visualization/
>>>> AlexNet.scala#L30
>>>>
>>>> 2. Symbol.scala does not contain the string "Convolution"
>>>>
>>>> https://github.com/apache/incubator-mxnet/blob/master/
>>>> scala-package/core/src/main/scala/ml/dmlc/mxnet/Symbol.scala#L982
>>>>
>>>> Question: where/how is Symbol.Convolution defined?
>>>>
>>>> On Wed, Oct 18, 2017 at 4:10 PM, TongKe Xue <tk...@tkxue.org> wrote:
>>>> > Hi,
>>>> >
>>>> > I am reading: https://mxnet.incubator.apache.org/api/scala/symbol.html
>>>> >
>>>> > I see Symbol.Variable, Symbol.Convolution
>>>> >
>>>> > When I look at Symbol.scala, I see Symbol.Variable at:
>>>> > https://github.com/apache/incubator-mxnet/blob/master/
>>>> scala-package/core/src/main/scala/ml/dmlc/mxnet/Symbol.scala#L982
>>>> >
>>>> > However, I can't find where Convolution, SoftMax, FullyConnected, ...
>>>> > are defined.
>>>> >
>>>> > Where are these Symbols defined?
>>>> >
>>>> > (I have also tried: grep "Convolution" . -R | grep scala | grep def --
>>>> > but found nothing).
>>>> >
>>>> > Thanks,
>>>> > --TongKe
>>>>
>>>
>>>
>>>
>>> --
>>> Rahul Huilgol
>
>
>
> --
> Yizhi Liu
> DMLC member
> Technical Manager
> Qihoo 360 Inc, Shanghai, China

Re: mxnet Scala Convolution

Posted by YiZhi Liu <ja...@gmail.com>.
Hi TongKe,

The symbols you are looking for are auto-generated by scala macros.
Pls refer to scala-package/macros

2017-10-19 0:40 GMT+00:00 TongKe Xue <tk...@tkxue.org>:
> Hi Rahul,
>
>   Thanks for explaining the high level design + pointing to the
> implementation details.
>
>   Besides reading the C++ code and mentally translating the Scala
> calls, is there a way to get a list of all generated Scala functions?
>
>   I have looked at:
>
> 1. https://mxnet.incubator.apache.org/api/scala/symbol.html
> shows a few examples, but is not exhaustive
>
> 2. https://mxnet.incubator.apache.org/api/scala/docs/index.html#ml.dmlc.mxnet.Symbol
> appears more comprehensive, but I find neither Convolution nor Softmax there.
>
>
> More specifically, my question is: nnvm adds a bunch of Scala bindings
> to C++ code. How do I get a list of all these bindings (name, type of
> inputs, type of output).
>
>
> Thanks!
> --TongKe
>
>
> On Wed, Oct 18, 2017 at 5:28 PM, Rahul Huilgol <ra...@gmail.com> wrote:
>> Hi TongKe,
>>
>> These are operators defined in the c++ backend under src/operator. For
>> example convolution is here
>> https://github.com/apache/incubator-mxnet/blob/master/src/operator/convolution.cc
>> . The operators are registered using nnvm, which helps automatically
>> generate the frontend functions.
>>
>> This tutorial on how to add a backend operator
>> <https://github.com/apache/incubator-mxnet/blob/master/docs/how_to/add_op_in_backend.md>
>> contains information on how to register such operators, which would help
>> you understand the above file.
>> An excerpt from there (for quadratic operator) : "If you use python, when
>> you type import mxnet as mx, two python functions for invoking your backend
>> implementation are generated on the fly: one is for imperative programming
>> registered as mxnet.ndarray.quadratic or mx.nd.quadratic for short; the
>> other one is for symbolic programming registered under module
>> mxnet.symbol.quadratic or mx.sym.quadratic for short."
>>
>> I'd think the Scala package works similarly.
>>
>> Regards,
>> Rahul
>>
>>
>>
>>
>> On Wed, Oct 18, 2017 at 5:06 PM, TongKe Xue <tk...@tkxue.org> wrote:
>>
>>> My earlier question was a bit messy.
>>>
>>> To rephrase my question:
>>>
>>> 1. Scala AlexNet sample code calls Symbol.Convolution:
>>>
>>> https://github.com/apache/incubator-mxnet/blob/master/
>>> scala-package/examples/src/main/scala/ml/dmlc/mxnetexamples/visualization/
>>> AlexNet.scala#L30
>>>
>>> 2. Symbol.scala does not contain the string "Convolution"
>>>
>>> https://github.com/apache/incubator-mxnet/blob/master/
>>> scala-package/core/src/main/scala/ml/dmlc/mxnet/Symbol.scala#L982
>>>
>>> Question: where/how is Symbol.Convolution defined?
>>>
>>> On Wed, Oct 18, 2017 at 4:10 PM, TongKe Xue <tk...@tkxue.org> wrote:
>>> > Hi,
>>> >
>>> > I am reading: https://mxnet.incubator.apache.org/api/scala/symbol.html
>>> >
>>> > I see Symbol.Variable, Symbol.Convolution
>>> >
>>> > When I look at Symbol.scala, I see Symbol.Variable at:
>>> > https://github.com/apache/incubator-mxnet/blob/master/
>>> scala-package/core/src/main/scala/ml/dmlc/mxnet/Symbol.scala#L982
>>> >
>>> > However, I can't find where Convolution, SoftMax, FullyConnected, ...
>>> > are defined.
>>> >
>>> > Where are these Symbols defined?
>>> >
>>> > (I have also tried: grep "Convolution" . -R | grep scala | grep def --
>>> > but found nothing).
>>> >
>>> > Thanks,
>>> > --TongKe
>>>
>>
>>
>>
>> --
>> Rahul Huilgol



-- 
Yizhi Liu
DMLC member
Technical Manager
Qihoo 360 Inc, Shanghai, China

Re: mxnet Scala Convolution

Posted by TongKe Xue <tk...@tkxue.org>.
Hi Rahul,

  Thanks for explaining the high level design + pointing to the
implementation details.

  Besides reading the C++ code and mentally translating the Scala
calls, is there a way to get a list of all generated Scala functions?

  I have looked at:

1. https://mxnet.incubator.apache.org/api/scala/symbol.html
shows a few examples, but is not exhaustive

2. https://mxnet.incubator.apache.org/api/scala/docs/index.html#ml.dmlc.mxnet.Symbol
appears more comprehensive, but I find neither Convolution nor Softmax there.


More specifically, my question is: nnvm adds a bunch of Scala bindings
to C++ code. How do I get a list of all these bindings (name, type of
inputs, type of output).


Thanks!
--TongKe


On Wed, Oct 18, 2017 at 5:28 PM, Rahul Huilgol <ra...@gmail.com> wrote:
> Hi TongKe,
>
> These are operators defined in the c++ backend under src/operator. For
> example convolution is here
> https://github.com/apache/incubator-mxnet/blob/master/src/operator/convolution.cc
> . The operators are registered using nnvm, which helps automatically
> generate the frontend functions.
>
> This tutorial on how to add a backend operator
> <https://github.com/apache/incubator-mxnet/blob/master/docs/how_to/add_op_in_backend.md>
> contains information on how to register such operators, which would help
> you understand the above file.
> An excerpt from there (for quadratic operator) : "If you use python, when
> you type import mxnet as mx, two python functions for invoking your backend
> implementation are generated on the fly: one is for imperative programming
> registered as mxnet.ndarray.quadratic or mx.nd.quadratic for short; the
> other one is for symbolic programming registered under module
> mxnet.symbol.quadratic or mx.sym.quadratic for short."
>
> I'd think the Scala package works similarly.
>
> Regards,
> Rahul
>
>
>
>
> On Wed, Oct 18, 2017 at 5:06 PM, TongKe Xue <tk...@tkxue.org> wrote:
>
>> My earlier question was a bit messy.
>>
>> To rephrase my question:
>>
>> 1. Scala AlexNet sample code calls Symbol.Convolution:
>>
>> https://github.com/apache/incubator-mxnet/blob/master/
>> scala-package/examples/src/main/scala/ml/dmlc/mxnetexamples/visualization/
>> AlexNet.scala#L30
>>
>> 2. Symbol.scala does not contain the string "Convolution"
>>
>> https://github.com/apache/incubator-mxnet/blob/master/
>> scala-package/core/src/main/scala/ml/dmlc/mxnet/Symbol.scala#L982
>>
>> Question: where/how is Symbol.Convolution defined?
>>
>> On Wed, Oct 18, 2017 at 4:10 PM, TongKe Xue <tk...@tkxue.org> wrote:
>> > Hi,
>> >
>> > I am reading: https://mxnet.incubator.apache.org/api/scala/symbol.html
>> >
>> > I see Symbol.Variable, Symbol.Convolution
>> >
>> > When I look at Symbol.scala, I see Symbol.Variable at:
>> > https://github.com/apache/incubator-mxnet/blob/master/
>> scala-package/core/src/main/scala/ml/dmlc/mxnet/Symbol.scala#L982
>> >
>> > However, I can't find where Convolution, SoftMax, FullyConnected, ...
>> > are defined.
>> >
>> > Where are these Symbols defined?
>> >
>> > (I have also tried: grep "Convolution" . -R | grep scala | grep def --
>> > but found nothing).
>> >
>> > Thanks,
>> > --TongKe
>>
>
>
>
> --
> Rahul Huilgol

Re: mxnet Scala Convolution

Posted by Rahul Huilgol <ra...@gmail.com>.
Hi TongKe,

These are operators defined in the c++ backend under src/operator. For
example convolution is here
https://github.com/apache/incubator-mxnet/blob/master/src/operator/convolution.cc
. The operators are registered using nnvm, which helps automatically
generate the frontend functions.

This tutorial on how to add a backend operator
<https://github.com/apache/incubator-mxnet/blob/master/docs/how_to/add_op_in_backend.md>
contains information on how to register such operators, which would help
you understand the above file.
An excerpt from there (for quadratic operator) : "If you use python, when
you type import mxnet as mx, two python functions for invoking your backend
implementation are generated on the fly: one is for imperative programming
registered as mxnet.ndarray.quadratic or mx.nd.quadratic for short; the
other one is for symbolic programming registered under module
mxnet.symbol.quadratic or mx.sym.quadratic for short."

I'd think the Scala package works similarly.

Regards,
Rahul




On Wed, Oct 18, 2017 at 5:06 PM, TongKe Xue <tk...@tkxue.org> wrote:

> My earlier question was a bit messy.
>
> To rephrase my question:
>
> 1. Scala AlexNet sample code calls Symbol.Convolution:
>
> https://github.com/apache/incubator-mxnet/blob/master/
> scala-package/examples/src/main/scala/ml/dmlc/mxnetexamples/visualization/
> AlexNet.scala#L30
>
> 2. Symbol.scala does not contain the string "Convolution"
>
> https://github.com/apache/incubator-mxnet/blob/master/
> scala-package/core/src/main/scala/ml/dmlc/mxnet/Symbol.scala#L982
>
> Question: where/how is Symbol.Convolution defined?
>
> On Wed, Oct 18, 2017 at 4:10 PM, TongKe Xue <tk...@tkxue.org> wrote:
> > Hi,
> >
> > I am reading: https://mxnet.incubator.apache.org/api/scala/symbol.html
> >
> > I see Symbol.Variable, Symbol.Convolution
> >
> > When I look at Symbol.scala, I see Symbol.Variable at:
> > https://github.com/apache/incubator-mxnet/blob/master/
> scala-package/core/src/main/scala/ml/dmlc/mxnet/Symbol.scala#L982
> >
> > However, I can't find where Convolution, SoftMax, FullyConnected, ...
> > are defined.
> >
> > Where are these Symbols defined?
> >
> > (I have also tried: grep "Convolution" . -R | grep scala | grep def --
> > but found nothing).
> >
> > Thanks,
> > --TongKe
>



-- 
Rahul Huilgol

Re: mxnet Scala Convolution

Posted by TongKe Xue <tk...@tkxue.org>.
My earlier question was a bit messy.

To rephrase my question:

1. Scala AlexNet sample code calls Symbol.Convolution:

https://github.com/apache/incubator-mxnet/blob/master/scala-package/examples/src/main/scala/ml/dmlc/mxnetexamples/visualization/AlexNet.scala#L30

2. Symbol.scala does not contain the string "Convolution"

https://github.com/apache/incubator-mxnet/blob/master/scala-package/core/src/main/scala/ml/dmlc/mxnet/Symbol.scala#L982

Question: where/how is Symbol.Convolution defined?

On Wed, Oct 18, 2017 at 4:10 PM, TongKe Xue <tk...@tkxue.org> wrote:
> Hi,
>
> I am reading: https://mxnet.incubator.apache.org/api/scala/symbol.html
>
> I see Symbol.Variable, Symbol.Convolution
>
> When I look at Symbol.scala, I see Symbol.Variable at:
> https://github.com/apache/incubator-mxnet/blob/master/scala-package/core/src/main/scala/ml/dmlc/mxnet/Symbol.scala#L982
>
> However, I can't find where Convolution, SoftMax, FullyConnected, ...
> are defined.
>
> Where are these Symbols defined?
>
> (I have also tried: grep "Convolution" . -R | grep scala | grep def --
> but found nothing).
>
> Thanks,
> --TongKe