jimmychou0704 opened a new issue #13748: custom loss cause "kernel died" in 
Jupyter notebook
URL: https://github.com/apache/incubator-mxnet/issues/13748
 
 
   ## Description
   I am implementing mxnet SoftmaxOutput from scratch as a warm up for a more 
complicated custom loss function. However when I fit the model my jupyter 
notebook dies immediately. 
   
   ## Minimum reproducible example
   Here is how I defined my custom loss function,
   ```
   class MySoftmaxOutput(mx.operator.CustomOp):
   
       def forward(self, is_train, req, in_data, out_data, aux):
           numerator = mx.nd.exp(in_data[0] - mx.nd.max(in_data[0]))
           denominator = mx.nd.sum(numerator, axis = 1, keepdims=True)
           self.assign(out_data[0], req[0], mx.nd.divide(numerator,denominator))
   
       def backward(self, req, out_grad, in_data, out_data, in_grad, aux):
           #in_grad[0][:] = (out_data[0] - in_data[1])
           self.assign(in_grad[0], req[0], (out_data[0] - in_data[1]))
   
   @mx.operator.register('MySoftmaxOutput')
   class MySoftmaxOuptProp(mx.operator.CustomOpProp):
       
       def __init__(self):
           super(MySoftmaxOuptProp, self).__init__(need_top_grad=False)
   
       #Required.
       def list_arguments(self):
           return ['data', 'label'] 
   
       #Required.
       def infer_shape(self, in_shape):
           data_shape = in_shape[0]
           label_shape = (in_shape[0][0],)
           output_shape = in_shape[0]
           return [data_shape, label_shape], [output_shape], 
       def create_operator(self, ctx, shapes, dtypes):
           return MySoftmaxOutput()
   ```
   Then a model is constructed as following, 
   ```
   data = mx.sym.Variable('data')
   label = mx.sym.Variable('label')
   affine1 = mx.sym.FullyConnected(data=data,name='fc1',num_hidden=124)
   hidden1 = mx.sym.Activation(data=affine1, act_type='relu')
   affine2 = mx.sym.FullyConnected(data=data,name='fc2',num_hidden=2)
   out = mx.sym.Custom(data=affine2, label=label, name='softmax', 
op_type='MySoftmaxOutput')
   mod = mx.mod.Module(out, data_names=['data'], label_names=['label'], 
context=mx.cpu())
   mod.bind(data_shapes=nd_iter.provide_data, 
label_shapes=nd_iter.provide_label)
   mod.init_params(initializer=mx.init.Xavier())
   ```
   So far so good. But when I run` mod.fit(nd_iter, num_epoch=10, 
optimizer='adam')` my jupyter notebook died immediately. The data set I used is 
small (less than 10mb).
   ## What have you tried to solve it?
   
   1.  Used mx.sym.SoftmaxOutput then everything is working.
   

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to