[GitHub] [incubator-mxnet] ChaiBapchya commented on a change in pull request #15517: [WIP]Tensor Inspector Tutorial

2019-07-12 Thread GitBox
ChaiBapchya commented on a change in pull request #15517: [WIP]Tensor Inspector 
Tutorial
URL: https://github.com/apache/incubator-mxnet/pull/15517#discussion_r303174181
 
 

 ##
 File path: docs/faq/tensor_inspector_tutorial.md
 ##
 @@ -0,0 +1,164 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Use TensorInspector to Help Debug Operators
+
+## Introduction
+
+When developing new operators, developers need to deal with tensor objects 
extensively. This new utility, Tensor Inspector, mainly aims to help developers 
debug by providing unified interfaces to print, check, and dump the tensor 
value. To developers' convenience, This utility works for all the three data 
types: Tensors, TBlobs, and NDArrays. Also, it supports both CPU and GPU 
tensors.
+
+
+## Usage 
+
+This utility locates in `src/common/tensor_inspector.h`. To use it in any 
operator code, just include `tensor_inspector`, construct an `TensorInspector` 
object, and call the APIs on that object. You can run any script that uses the 
operator you just modified then.
+
+The screenshot below shows a sample usage in 
`src/operator/nn/convolution-inl.h`.
+
+![Screen Shot 2019-07-08 at 5 03 46 
PM](https://user-images.githubusercontent.com/16669457/60850062-68690e00-a1a2-11e9-8268-033edde17aa4.png)
 
 Review comment:
   Would be great if you could give the image a recognizable name


This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services


[GitHub] [incubator-mxnet] ChaiBapchya commented on a change in pull request #15517: [WIP]Tensor Inspector Tutorial

2019-07-12 Thread GitBox
ChaiBapchya commented on a change in pull request #15517: [WIP]Tensor Inspector 
Tutorial
URL: https://github.com/apache/incubator-mxnet/pull/15517#discussion_r303174854
 
 

 ##
 File path: docs/faq/tensor_inspector_tutorial.md
 ##
 @@ -0,0 +1,164 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Use TensorInspector to Help Debug Operators
+
+## Introduction
+
+When developing new operators, developers need to deal with tensor objects 
extensively. This new utility, Tensor Inspector, mainly aims to help developers 
debug by providing unified interfaces to print, check, and dump the tensor 
value. To developers' convenience, This utility works for all the three data 
types: Tensors, TBlobs, and NDArrays. Also, it supports both CPU and GPU 
tensors.
+
+
+## Usage 
+
+This utility locates in `src/common/tensor_inspector.h`. To use it in any 
operator code, just include `tensor_inspector`, construct an `TensorInspector` 
object, and call the APIs on that object. You can run any script that uses the 
operator you just modified then.
+
+The screenshot below shows a sample usage in 
`src/operator/nn/convolution-inl.h`.
+
+![Screen Shot 2019-07-08 at 5 03 46 
PM](https://user-images.githubusercontent.com/16669457/60850062-68690e00-a1a2-11e9-8268-033edde17aa4.png)
+
+
+## Functionalities/APIs
+
+### Create a TensorInspector Object from Tensor, TBlob, and NDArray Objects
+
+You can create a `TensorInspector` object by passing in two things: 1) an 
object of type `Tensor`, `Tbob`, or `NDArray`, and 2) an `RunContext` object.
+
+Essentially, `TensorInspector` can be understood as a wrapper class around 
`TBlob`. Internally, the `Tensor`, `Tbob`, or `NDArray` object that you passed 
in will all be converted to a `TBlob` object. The `RunContext` object is used 
when the the tensor is a GPU tensor; in such case, we need to use the context 
information to copy the data from GPU memory to CPU/main memory.
+
+Below are the three constructors:
+
+```c++
+// Construct from Tensor object
+template
+TensorInspector(const  mshadow::Tensor& ts, const 
RunContext& ctx);
+
+// Construct from TBlob object
+TensorInspector(const TBlob& tb, const RunContext& ctx);
+
+// Construct from NDArray object
+TensorInspector(const NDArray& arr, const RunContext& ctx):
+```
+
+### Print Tensor Value (Static) 
+
+To print out the tensor value in a nicely structured way,  you can use this 
API:
+
+```c++
+void print_string();
+```
+
+This API will print the entire tensor to `std::cout` and preserve the shape 
(it supports all dimensions from 1 and up). You can copy the output and 
interpret it with any `JSON` loader. Also, on the last line of the output you 
can find some useful information about the tensor. Refer to the case below, we 
are able to know that this is a float-typed tensor with shape 20x1x5x5.
+
+![Screen Shot 2019-07-08 at 4 07 16 
PM](https://user-images.githubusercontent.com/16669457/60848554-d8c06100-a19b-11e9-9fe0-23e79a7a371a.png)
+
+If instead of printing the tensor to `std::cout`, you just need a `string`, 
you can use this API:
+```c++
+std::string void to_string();
+```
+
+### Interactively Print Tensor Value (Dynamic) 
+
+When debugging, situations might occur that at compilation time, you do not 
know which part of a tensor to inspect. Also, sometimes, it would be nice to 
pause the operator control flow to “zoom into” a specific, erroneous part of a 
tensor multiple times until you are satisfied. In this regard, you can use this 
API to interactively inspect the tensor:
+
+```c++
+void  interactive_print(std::string tag =  "") {
+```
+
+This API will set a "break point" in your code, so that you will enter a loop 
that will keep asking you for further command. In the API call, `tag` is an 
optional parameter to give the call a name, so that you can identify it when 
you have multiple `interactive_print()` calls in different parts of your code. 
A visit count will tell you for how many times have you stepped into this 
particular "break point", should this operator be called more than once. Note 
that all `interactive_print()` calls are properly locked, so you can use it in 
many different places without issues.
+
+![Screen Shot 2019-07-10 at 5 29 07 
PM](https://user-images.githubusercontent.com/16669457/61013632-5325e800-a338-11e9-90e6-607f17d81495.png)
+
+Refer the screenshot above, there are many useful commands available: you can 
type "e" to print out the entire tensor, ''d" to dump the tensor to file (see 
below), "b" to break from this command loop, and "s" to skip all future 
`interactive_print()`. Most importantly, in this screen, you can specify a part 
of the tensor that you are particularly interested in and want to print out. 
For example, for this 20x1x5x5 tensor, you can type in "0, 0" and presss enter 
to check the sub-tensor with shape 5x5 at coordinate (0, 0). 
+
+### Check Tensor Value
+
+Sometimes, developers might want to check if the tensor contains unexpected 
values which could be negative 

[GitHub] [incubator-mxnet] ChaiBapchya commented on a change in pull request #15517: [WIP]Tensor Inspector Tutorial

2019-07-12 Thread GitBox
ChaiBapchya commented on a change in pull request #15517: [WIP]Tensor Inspector 
Tutorial
URL: https://github.com/apache/incubator-mxnet/pull/15517#discussion_r303174924
 
 

 ##
 File path: docs/faq/tensor_inspector_tutorial.md
 ##
 @@ -0,0 +1,164 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Use TensorInspector to Help Debug Operators
+
+## Introduction
+
+When developing new operators, developers need to deal with tensor objects 
extensively. This new utility, Tensor Inspector, mainly aims to help developers 
debug by providing unified interfaces to print, check, and dump the tensor 
value. To developers' convenience, This utility works for all the three data 
types: Tensors, TBlobs, and NDArrays. Also, it supports both CPU and GPU 
tensors.
+
+
+## Usage 
+
+This utility locates in `src/common/tensor_inspector.h`. To use it in any 
operator code, just include `tensor_inspector`, construct an `TensorInspector` 
object, and call the APIs on that object. You can run any script that uses the 
operator you just modified then.
+
+The screenshot below shows a sample usage in 
`src/operator/nn/convolution-inl.h`.
+
+![Screen Shot 2019-07-08 at 5 03 46 
PM](https://user-images.githubusercontent.com/16669457/60850062-68690e00-a1a2-11e9-8268-033edde17aa4.png)
+
+
+## Functionalities/APIs
+
+### Create a TensorInspector Object from Tensor, TBlob, and NDArray Objects
+
+You can create a `TensorInspector` object by passing in two things: 1) an 
object of type `Tensor`, `Tbob`, or `NDArray`, and 2) an `RunContext` object.
+
+Essentially, `TensorInspector` can be understood as a wrapper class around 
`TBlob`. Internally, the `Tensor`, `Tbob`, or `NDArray` object that you passed 
in will all be converted to a `TBlob` object. The `RunContext` object is used 
when the the tensor is a GPU tensor; in such case, we need to use the context 
information to copy the data from GPU memory to CPU/main memory.
+
+Below are the three constructors:
+
+```c++
+// Construct from Tensor object
+template
+TensorInspector(const  mshadow::Tensor& ts, const 
RunContext& ctx);
+
+// Construct from TBlob object
+TensorInspector(const TBlob& tb, const RunContext& ctx);
+
+// Construct from NDArray object
+TensorInspector(const NDArray& arr, const RunContext& ctx):
+```
+
+### Print Tensor Value (Static) 
+
+To print out the tensor value in a nicely structured way,  you can use this 
API:
+
+```c++
+void print_string();
+```
+
+This API will print the entire tensor to `std::cout` and preserve the shape 
(it supports all dimensions from 1 and up). You can copy the output and 
interpret it with any `JSON` loader. Also, on the last line of the output you 
can find some useful information about the tensor. Refer to the case below, we 
are able to know that this is a float-typed tensor with shape 20x1x5x5.
+
+![Screen Shot 2019-07-08 at 4 07 16 
PM](https://user-images.githubusercontent.com/16669457/60848554-d8c06100-a19b-11e9-9fe0-23e79a7a371a.png)
+
+If instead of printing the tensor to `std::cout`, you just need a `string`, 
you can use this API:
+```c++
+std::string void to_string();
+```
+
+### Interactively Print Tensor Value (Dynamic) 
+
+When debugging, situations might occur that at compilation time, you do not 
know which part of a tensor to inspect. Also, sometimes, it would be nice to 
pause the operator control flow to “zoom into” a specific, erroneous part of a 
tensor multiple times until you are satisfied. In this regard, you can use this 
API to interactively inspect the tensor:
+
+```c++
+void  interactive_print(std::string tag =  "") {
+```
+
+This API will set a "break point" in your code, so that you will enter a loop 
that will keep asking you for further command. In the API call, `tag` is an 
optional parameter to give the call a name, so that you can identify it when 
you have multiple `interactive_print()` calls in different parts of your code. 
A visit count will tell you for how many times have you stepped into this 
particular "break point", should this operator be called more than once. Note 
that all `interactive_print()` calls are properly locked, so you can use it in 
many different places without issues.
+
+![Screen Shot 2019-07-10 at 5 29 07 
PM](https://user-images.githubusercontent.com/16669457/61013632-5325e800-a338-11e9-90e6-607f17d81495.png)
+
+Refer the screenshot above, there are many useful commands available: you can 
type "e" to print out the entire tensor, ''d" to dump the tensor to file (see 
below), "b" to break from this command loop, and "s" to skip all future 
`interactive_print()`. Most importantly, in this screen, you can specify a part 
of the tensor that you are particularly interested in and want to print out. 
For example, for this 20x1x5x5 tensor, you can type in "0, 0" and presss enter 
to check the sub-tensor with shape 5x5 at coordinate (0, 0). 
+
+### Check Tensor Value
+
+Sometimes, developers might want to check if the tensor contains unexpected 
values which could be negative 

[GitHub] [incubator-mxnet] ChaiBapchya commented on a change in pull request #15517: [WIP]Tensor Inspector Tutorial

2019-07-12 Thread GitBox
ChaiBapchya commented on a change in pull request #15517: [WIP]Tensor Inspector 
Tutorial
URL: https://github.com/apache/incubator-mxnet/pull/15517#discussion_r303174371
 
 

 ##
 File path: docs/faq/tensor_inspector_tutorial.md
 ##
 @@ -0,0 +1,164 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Use TensorInspector to Help Debug Operators
+
+## Introduction
+
+When developing new operators, developers need to deal with tensor objects 
extensively. This new utility, Tensor Inspector, mainly aims to help developers 
debug by providing unified interfaces to print, check, and dump the tensor 
value. To developers' convenience, This utility works for all the three data 
types: Tensors, TBlobs, and NDArrays. Also, it supports both CPU and GPU 
tensors.
+
+
+## Usage 
+
+This utility locates in `src/common/tensor_inspector.h`. To use it in any 
operator code, just include `tensor_inspector`, construct an `TensorInspector` 
object, and call the APIs on that object. You can run any script that uses the 
operator you just modified then.
+
+The screenshot below shows a sample usage in 
`src/operator/nn/convolution-inl.h`.
+
+![Screen Shot 2019-07-08 at 5 03 46 
PM](https://user-images.githubusercontent.com/16669457/60850062-68690e00-a1a2-11e9-8268-033edde17aa4.png)
+
+
+## Functionalities/APIs
+
+### Create a TensorInspector Object from Tensor, TBlob, and NDArray Objects
+
+You can create a `TensorInspector` object by passing in two things: 1) an 
object of type `Tensor`, `Tbob`, or `NDArray`, and 2) an `RunContext` object.
+
+Essentially, `TensorInspector` can be understood as a wrapper class around 
`TBlob`. Internally, the `Tensor`, `Tbob`, or `NDArray` object that you passed 
in will all be converted to a `TBlob` object. The `RunContext` object is used 
when the the tensor is a GPU tensor; in such case, we need to use the context 
information to copy the data from GPU memory to CPU/main memory.
 
 Review comment:
   ```suggestion
   Essentially, `TensorInspector` can be understood as a wrapper class around 
`TBlob`. Internally, the `Tensor`, `Tbob`, or `NDArray` object that you passed 
in will be converted to a `TBlob` object. The `RunContext` object is used when 
the the tensor is a GPU tensor; in such a case, we need to use the context 
information to copy the data from GPU memory to CPU/main memory.
   ```


This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services


[GitHub] [incubator-mxnet] ChaiBapchya commented on a change in pull request #15517: [WIP]Tensor Inspector Tutorial

2019-07-12 Thread GitBox
ChaiBapchya commented on a change in pull request #15517: [WIP]Tensor Inspector 
Tutorial
URL: https://github.com/apache/incubator-mxnet/pull/15517#discussion_r303173725
 
 

 ##
 File path: docs/faq/tensor_inspector_tutorial.md
 ##
 @@ -0,0 +1,164 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Use TensorInspector to Help Debug Operators
+
+## Introduction
+
+When developing new operators, developers need to deal with tensor objects 
extensively. This new utility, Tensor Inspector, mainly aims to help developers 
debug by providing unified interfaces to print, check, and dump the tensor 
value. To developers' convenience, This utility works for all the three data 
types: Tensors, TBlobs, and NDArrays. Also, it supports both CPU and GPU 
tensors.
+
+
+## Usage 
+
+This utility locates in `src/common/tensor_inspector.h`. To use it in any 
operator code, just include `tensor_inspector`, construct an `TensorInspector` 
object, and call the APIs on that object. You can run any script that uses the 
operator you just modified then.
 
 Review comment:
   ```suggestion
   This utility is located in `src/common/tensor_inspector.h`. To use it in any 
operator code, just include `tensor_inspector`, construct an `TensorInspector` 
object, and call the APIs on that object. You can run any script that uses the 
operator you just modified then.
   ```


This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services


[GitHub] [incubator-mxnet] ChaiBapchya commented on a change in pull request #15517: [WIP]Tensor Inspector Tutorial

2019-07-12 Thread GitBox
ChaiBapchya commented on a change in pull request #15517: [WIP]Tensor Inspector 
Tutorial
URL: https://github.com/apache/incubator-mxnet/pull/15517#discussion_r303173914
 
 

 ##
 File path: docs/faq/tensor_inspector_tutorial.md
 ##
 @@ -0,0 +1,164 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Use TensorInspector to Help Debug Operators
+
+## Introduction
+
+When developing new operators, developers need to deal with tensor objects 
extensively. This new utility, Tensor Inspector, mainly aims to help developers 
debug by providing unified interfaces to print, check, and dump the tensor 
value. To developers' convenience, This utility works for all the three data 
types: Tensors, TBlobs, and NDArrays. Also, it supports both CPU and GPU 
tensors.
 
 Review comment:
   
   ```suggestion
   When developing new operators, developers need to deal with tensor objects 
extensively. This new utility, Tensor Inspector, mainly aims to help developers 
debug by providing unified interfaces to print, check, and dump the tensor 
value. To developers' convenience, this utility works for all the three data 
types: Tensors, TBlobs, and NDArrays. Also, it supports both CPU and GPU 
tensors.
   ```


This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services


[GitHub] [incubator-mxnet] ChaiBapchya commented on a change in pull request #15517: [WIP]Tensor Inspector Tutorial

2019-07-12 Thread GitBox
ChaiBapchya commented on a change in pull request #15517: [WIP]Tensor Inspector 
Tutorial
URL: https://github.com/apache/incubator-mxnet/pull/15517#discussion_r303174576
 
 

 ##
 File path: docs/faq/tensor_inspector_tutorial.md
 ##
 @@ -0,0 +1,164 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Use TensorInspector to Help Debug Operators
+
+## Introduction
+
+When developing new operators, developers need to deal with tensor objects 
extensively. This new utility, Tensor Inspector, mainly aims to help developers 
debug by providing unified interfaces to print, check, and dump the tensor 
value. To developers' convenience, This utility works for all the three data 
types: Tensors, TBlobs, and NDArrays. Also, it supports both CPU and GPU 
tensors.
+
+
+## Usage 
+
+This utility locates in `src/common/tensor_inspector.h`. To use it in any 
operator code, just include `tensor_inspector`, construct an `TensorInspector` 
object, and call the APIs on that object. You can run any script that uses the 
operator you just modified then.
+
+The screenshot below shows a sample usage in 
`src/operator/nn/convolution-inl.h`.
+
+![Screen Shot 2019-07-08 at 5 03 46 
PM](https://user-images.githubusercontent.com/16669457/60850062-68690e00-a1a2-11e9-8268-033edde17aa4.png)
+
+
+## Functionalities/APIs
+
+### Create a TensorInspector Object from Tensor, TBlob, and NDArray Objects
+
+You can create a `TensorInspector` object by passing in two things: 1) an 
object of type `Tensor`, `Tbob`, or `NDArray`, and 2) an `RunContext` object.
+
+Essentially, `TensorInspector` can be understood as a wrapper class around 
`TBlob`. Internally, the `Tensor`, `Tbob`, or `NDArray` object that you passed 
in will all be converted to a `TBlob` object. The `RunContext` object is used 
when the the tensor is a GPU tensor; in such case, we need to use the context 
information to copy the data from GPU memory to CPU/main memory.
+
+Below are the three constructors:
+
+```c++
+// Construct from Tensor object
+template
+TensorInspector(const  mshadow::Tensor& ts, const 
RunContext& ctx);
+
+// Construct from TBlob object
+TensorInspector(const TBlob& tb, const RunContext& ctx);
+
+// Construct from NDArray object
+TensorInspector(const NDArray& arr, const RunContext& ctx):
+```
+
+### Print Tensor Value (Static) 
+
+To print out the tensor value in a nicely structured way,  you can use this 
API:
+
+```c++
+void print_string();
+```
+
+This API will print the entire tensor to `std::cout` and preserve the shape 
(it supports all dimensions from 1 and up). You can copy the output and 
interpret it with any `JSON` loader. Also, on the last line of the output you 
can find some useful information about the tensor. Refer to the case below, we 
are able to know that this is a float-typed tensor with shape 20x1x5x5.
+
+![Screen Shot 2019-07-08 at 4 07 16 
PM](https://user-images.githubusercontent.com/16669457/60848554-d8c06100-a19b-11e9-9fe0-23e79a7a371a.png)
 
 Review comment:
   likewise


This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services