mxnet 自定义激活函数/numpy 中的 op
mxnet custom activation function / op in numpy
我对在 mxnet 中创建自定义激活函数/op 时使用的语法有疑问。我在看这个例子:
https://github.com/dmlc/mxnet/blob/master/example/numpy-ops/custom_softmax.py
具体来说,这部分:
class Softmax(mx.operator.CustomOp):
def forward(self, is_train, req, in_data, out_data, aux):
x = in_data[0].asnumpy()
y = np.exp(x - x.max(axis=1).reshape((x.shape[0], 1)))
y /= y.sum(axis=1).reshape((x.shape[0], 1))
self.assign(out_data[0], req[0], mx.nd.array(y))
def backward(self, req, out_grad, in_data, out_data, in_grad, aux):
l = in_data[1].asnumpy().ravel().astype(np.int)
y = out_data[0].asnumpy()
y[np.arange(l.shape[0]), l] -= 1.0
self.assign(in_grad[0], req[0], mx.nd.array(y))
in_data[0] 与 in_data[1] 以及 out_data[0] 与 out_data[1] 有何区别?指数对应什么?
谢谢!
in_data=[输入,标签],out_data=[输出]
看看 softmax 输出 API: https://github.com/dmlc/mxnet/blob/master/src/operator/softmax_output-inl.h
CHECK_EQ(in_data.size(), 2U) << "SoftmaxOutput Input: [data, label]";
CHECK_EQ(out_data.size(), 1U) << "SoftmaxOutput Output: [output]";
我对在 mxnet 中创建自定义激活函数/op 时使用的语法有疑问。我在看这个例子: https://github.com/dmlc/mxnet/blob/master/example/numpy-ops/custom_softmax.py
具体来说,这部分:
class Softmax(mx.operator.CustomOp):
def forward(self, is_train, req, in_data, out_data, aux):
x = in_data[0].asnumpy()
y = np.exp(x - x.max(axis=1).reshape((x.shape[0], 1)))
y /= y.sum(axis=1).reshape((x.shape[0], 1))
self.assign(out_data[0], req[0], mx.nd.array(y))
def backward(self, req, out_grad, in_data, out_data, in_grad, aux):
l = in_data[1].asnumpy().ravel().astype(np.int)
y = out_data[0].asnumpy()
y[np.arange(l.shape[0]), l] -= 1.0
self.assign(in_grad[0], req[0], mx.nd.array(y))
in_data[0] 与 in_data[1] 以及 out_data[0] 与 out_data[1] 有何区别?指数对应什么?
谢谢!
in_data=[输入,标签],out_data=[输出]
看看 softmax 输出 API: https://github.com/dmlc/mxnet/blob/master/src/operator/softmax_output-inl.h
CHECK_EQ(in_data.size(), 2U) << "SoftmaxOutput Input: [data, label]";
CHECK_EQ(out_data.size(), 1U) << "SoftmaxOutput Output: [output]";