26 template<
typename Real_t>
 
   27 void TReference<Real_t>::IdentityDerivative(TMatrixT<Real_t> & B,
 
   28                                             const TMatrixT<Real_t> &)
 
   34    for (
size_t i = 0; i < m; i++) {
 
   35       for (
size_t j = 0; j < n; j++) {
 
   42 template<
typename Real_t>
 
   43 void TReference<Real_t>::Relu(TMatrixT<Real_t> &A)
 
   49    for (
size_t i = 0; i < m; i++) {
 
   50       for (
size_t j = 0; j < n; j++) {
 
   51          A(i,j) = std::max((Real_t) 0.0, A(i,j));
 
   57 template<
typename Real_t>
 
   58 inline void TReference<Real_t>::ReluDerivative(TMatrixT<Real_t> & B,
 
   59                                               const TMatrixT<Real_t> & A)
 
   65    for (
size_t i = 0; i < m; i++)
 
   67       for (
size_t j = 0; j < n; j++)
 
   69          B(i,j) = (A(i,j) < 0) ? 0.0 : 1.0;
 
   75 template<
typename Real_t>
 
   76 void TReference<Real_t>::Sigmoid(TMatrixT<Real_t> & A)
 
   82    for (
size_t i = 0; i < m; i++) {
 
   83       for (
size_t j = 0; j < n; j++) {
 
   84          Real_t sig = 1.0 / (1.0 + std::exp(-A(i,j)));
 
   91 template<
typename Real_t>
 
   92 inline void TReference<Real_t>::SigmoidDerivative(TMatrixT<Real_t> & B,
 
   93                                                  const TMatrixT<Real_t> & A)
 
   99    for (
size_t i = 0; i < m; i++) {
 
  100       for (
size_t j = 0; j < n; j++) {
 
  101          Real_t sig = 1.0 / (1.0 + std::exp(-A(i,j)));
 
  102          B(i,j) = sig * (1.0 - sig);
 
  108 template<
typename Real_t>
 
  109 inline void TReference<Real_t>::Tanh(TMatrixT<Real_t> & B)
 
  115    for (
size_t i = 0; i < m; i++) {
 
  116       for (
size_t j = 0; j < n; j++) {
 
  117          Real_t t = tanh(B(i,j));
 
  124 template<
typename Real_t>
 
  125 inline void TReference<Real_t>::TanhDerivative(TMatrixT<Real_t> & B,
 
  126                                               const TMatrixT<Real_t> & A)
 
  132    for (
size_t i = 0; i < m; i++) {
 
  133       for (
size_t j = 0; j < n; j++) {
 
  134          Real_t t = tanh(A(i,j));
 
  141 template<
typename Real_t>
 
  142 inline void TReference<Real_t>::SymmetricRelu(TMatrixT<Real_t> & B)
 
  148    for (
size_t i = 0; i < m; i++) {
 
  149       for (
size_t j = 0; j < n; j++) {
 
  150          B(i,j) = fabs(B(i,j));
 
  156 template<
typename Real_t>
 
  157 inline void TReference<Real_t>::SymmetricReluDerivative(TMatrixT<Real_t> & B,
 
  158                                                        const TMatrixT<Real_t> & A)
 
  164    for (
size_t i = 0; i < m; i++) {
 
  165       for (
size_t j = 0; j < n; j++) {
 
  166          B(i,j) = (A(i,j) < 0.0) ? -1.0 : 1.0;
 
  172 template<
typename Real_t>
 
  173 inline void TReference<Real_t>::SoftSign(TMatrixT<Real_t> & A)
 
  179    for (
size_t i = 0; i < m; i++) {
 
  180       for (
size_t j = 0; j < n; j++) {
 
  182          A(i,j)   = x / (1 + fabs(x));
 
  188 template<
typename Real_t>
 
  189 inline void TReference<Real_t>::SoftSignDerivative(TMatrixT<Real_t> & B,
 
  190                                                   const TMatrixT<Real_t> & A)
 
  196    for (
size_t i = 0; i < m; i++) {
 
  197       for (
size_t j = 0; j < n; j++) {
 
  198          Real_t x = 1.0 + fabs(A(i,j));
 
  199          B(i,j)   = 1.0 / (x * x);
 
  205 template<
typename Real_t>
 
  206 inline void TReference<Real_t>::Gauss(TMatrixT<Real_t> & A)
 
  212    for (
size_t i = 0; i < m; i++) {
 
  213       for (
size_t j = 0; j < n; j++) {
 
  215          A(i,j)   = exp(- x * x);
 
  221 template<
typename Real_t>
 
  222 inline void TReference<Real_t>::GaussDerivative(TMatrixT<Real_t> & B,
 
  223                                                const TMatrixT<Real_t> & A)
 
  229    for (
size_t i = 0; i < m; i++) {
 
  230       for (
size_t j = 0; j < n; j++) {
 
  232          B(i,j)   = - 2.0 * x * exp(- x * x);