aboutsummaryrefslogtreecommitdiffhomepage
path: root/unsupported/Eigen/CXX11/src/Tensor/TensorFunctors.h
diff options
context:
space:
mode:
authorGravatar Benoit Steiner <benoit.steiner.goog@gmail.com>2015-07-17 09:29:00 -0700
committerGravatar Benoit Steiner <benoit.steiner.goog@gmail.com>2015-07-17 09:29:00 -0700
commit06a22ca5bd0e34689d4fcff0cdd6edfd1ee76d2d (patch)
tree4cb45a92a4bd97af28a257d9f0603dd3dc5d356b /unsupported/Eigen/CXX11/src/Tensor/TensorFunctors.h
parent979b73cebfcdd8a4b323e75b4238f21af3036326 (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.h30
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
{