diff options
author | Benoit Steiner <benoit.steiner.goog@gmail.com> | 2015-07-17 09:29:00 -0700 |
---|---|---|
committer | Benoit Steiner <benoit.steiner.goog@gmail.com> | 2015-07-17 09:29:00 -0700 |
commit | 06a22ca5bd0e34689d4fcff0cdd6edfd1ee76d2d (patch) | |
tree | 4cb45a92a4bd97af28a257d9f0603dd3dc5d356b /unsupported/Eigen/CXX11/src/Tensor/TensorFunctors.h | |
parent | 979b73cebfcdd8a4b323e75b4238f21af3036326 (diff) |
Added support for sigmoid function to the tensor module
Diffstat (limited to 'unsupported/Eigen/CXX11/src/Tensor/TensorFunctors.h')
-rw-r--r-- | unsupported/Eigen/CXX11/src/Tensor/TensorFunctors.h | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/unsupported/Eigen/CXX11/src/Tensor/TensorFunctors.h b/unsupported/Eigen/CXX11/src/Tensor/TensorFunctors.h index 14ffd5c93..1a23a9fa0 100644 --- a/unsupported/Eigen/CXX11/src/Tensor/TensorFunctors.h +++ b/unsupported/Eigen/CXX11/src/Tensor/TensorFunctors.h @@ -13,6 +13,36 @@ namespace Eigen { namespace internal { + +/** \internal + * \brief Template functor to compute the sigmoid of a scalar + * \sa class CwiseUnaryOp, ArrayBase::sigmoid() + */ +template <typename T> +struct scalar_sigmoid_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_sigmoid_op) + EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T operator()(const T& x) const { + const T one = T(1); + return one / (one + std::exp(-x)); + } + + template <typename Packet> + inline Packet packetOp(const Packet& x) const { + const Packet one = pset1<Packet>(1); + return pdiv(one, padd(one, pexp(pnegate(x)))); + } +}; + +template <typename T> +struct functor_traits<scalar_sigmoid_op<T> > { + enum { + Cost = NumTraits<T>::AddCost * 2 + NumTraits<T>::MulCost * 6, + PacketAccess = packet_traits<T>::HasAdd && packet_traits<T>::HasDiv && + packet_traits<T>::HasNegate && packet_traits<T>::HasExp + }; +}; + + // Standard reduction functors template <typename T> struct SumReducer { |