lanking520 commented on issue #11926: segfault in native code while trying to 
use CustomOp
URL: 
https://github.com/apache/incubator-mxnet/issues/11926#issuecomment-469519405
 
 
   After some tests, your problem can be solved through this:
   ```
     Operator.register("constant", new ConstantOpProp())
     Operator.register("constant2", new ConstantOpProp())
   
     val value1 = NDArray.array(Array(-10f), Shape(1))
     val value2 = NDArray.array(Array(10f), Shape(1))
   
     val const1 = Symbol.Custom("constant-1")()(
       Map("id" -> 1, "op_type" -> "constant", "value" -> 
String.copyValueOf(value1.serialize().map(_.toChar)),
         "aaa" -> "aaa"
       )
     )
     val const2 = Symbol.Custom("constant-2")()(
       Map("id" -> 2, "op_type" -> "constant2", "value" -> 
String.copyValueOf(value2.serialize().map(_.toChar)),
         "bbb" -> "bbb"
       )
     )
   ```
   It will actually bring you the right result you need. The weird thing is the 
Custom Operator that being registered is an object shared along in the same 
state. The state is used in the Symbolic graph as you used in here. When you 
have two ops are defined in the same state, they will share the same kwargs as 
the Engine would thought they are the same since they all registered to the 
same op. The weird thing with Symbolic graph, it will only be analysed at the 
end in order to produce the best way to execute. That cause the overwrite 
problem you have. The same problem is not reproducible in sequential execution 
with NDArray.

----------------------------------------------------------------
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

Reply via email to