提交 dffa8fab 编写于 作者: C caoying03

add softsign activation.

上级 c6ec26df
...@@ -212,6 +212,37 @@ Error __must_check backward(Argument& act) { ...@@ -212,6 +212,37 @@ Error __must_check backward(Argument& act) {
} }
END_DEFINE_ACTIVATION(sequence_softmax) END_DEFINE_ACTIVATION(sequence_softmax)
/*
* @brief SoftSign Activation.
* \f[
* f(z) = \frac{z}{1 + |z|}
* \f]
*/
BEGIN_DEFINE_ACTIVATION(softsign)
private:
MatrixPtr denominator_;
Error __must_check forward(Argument& act) {
size_t height = act.value->getHeight();
size_t width = act.value->getWidth();
Matrix::resizeOrCreate(
denominator_, height, width, false, useGpu(act.deviceId));
denominator_->assign(*act.value);
denominator_->abs2();
denominator_->add(1.);
act.value->dotDiv(*act.value, *denominator_);
return Error();
}
Error __must_check backward(Argument& act) {
denominator_->square2();
denominator_->scalarDiv(*denominator_, 1.);
act.grad->dotMul(*act.grad, *denominator_);
return Error();
}
END_DEFINE_ACTIVATION(softsign)
/** /**
* @brief Relu Activation. * @brief Relu Activation.
* forward. y = max(0, z) * forward. y = max(0, z)
......
...@@ -17,7 +17,8 @@ __all__ = [ ...@@ -17,7 +17,8 @@ __all__ = [
"IdentityActivation", "LinearActivation", 'SequenceSoftmaxActivation', "IdentityActivation", "LinearActivation", 'SequenceSoftmaxActivation',
'ExpActivation', "ReluActivation", "BReluActivation", "SoftReluActivation", 'ExpActivation', "ReluActivation", "BReluActivation", "SoftReluActivation",
"STanhActivation", "AbsActivation", "SquareActivation", "BaseActivation", "STanhActivation", "AbsActivation", "SquareActivation", "BaseActivation",
"LogActivation", "SqrtActivation", "ReciprocalActivation" "LogActivation", "SqrtActivation", "ReciprocalActivation",
"SoftSignActivation"
] ]
...@@ -243,8 +244,20 @@ class ReciprocalActivation(BaseActivation): ...@@ -243,8 +244,20 @@ class ReciprocalActivation(BaseActivation):
Reciprocal Activation. Reciprocal Activation.
.. math:: .. math::
f(z) = 1/z f(z)=\\frac{1}{z}
""" """
def __init__(self): def __init__(self):
BaseActivation.__init__(self, 'reciprocal', False) BaseActivation.__init__(self, 'reciprocal', False)
class SoftSignActivation(BaseActivation):
"""
SoftSign Activation.
.. math::
f(z)=\\frac{1}{1 + |z|}
"""
def __init__(self):
BaseActivation.__init__(self, 'softsign', False)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册