现在的位置: 首页 > 综合 > 正文

激活函数实现–3 Tanh函数实现

2018年04月13日 ⁄ 综合 ⁄ 共 1984字 ⁄ 字号 评论关闭

1.TANH函数的定义

2. TANH函数的导数

 

3.TANH函数的实现

Tanh主要是通过类Tanh来实现的,该类继承自AbstrcactActivation类,主要实现Activating接口和Derivating接口。
Tanh类的定义如下:

<span style="font-size:24px;">#ifndef TANH_H
#define TANH_H

#include "abstractactivationfunction.h"


/**
* @brief The tanh class used to calculate the tanh activation function.
*
* @author sheng
* @date  2014-07-18
* @version 0.1
*
* @history
*     <author>       <date>         <version>        <description>
*      sheng       2014-07-18          0.1         build the class
*
*/
class Tanh : public AbstractActivationFunction
{
    public:
        Tanh();
        cv::Mat Activating(const cv::Mat &InputMat);
        cv::Mat Derivating(const cv::Mat &InputMat);
};

#endif // TANH_H
</span>

函数的定义如下:

<span style="font-size:24px;">#include "tanh.h"


/**
* @brief The default constructor.
*
* @author sheng
* @version 0.1
* @date 2014-07-18
*
* @history
*     <author>       <date>         <version>        <description>
*      sheng       2014-07-18          0.1         build the function
*
*
*/
Tanh::Tanh()
{
}





/**
* @brief Calculating the tanh of the inputmat.
* @param InputMat  The input mat
* @return the result of tanh(inputmat), whose size is the same of the
*         InputMat.
*
*
* @author sheng
* @version 0.1
* @date 2014-07-18
*
* @history
*     <author>       <date>         <version>        <description>
*      sheng       2014-07-18          0.1         build the function
*
*
*
*/
cv::Mat Tanh::Activating(const cv::Mat &InputMat)
{
    // convert the inputmat to the float mat
    cv::Mat Floatmat = ConvertToFloatMat(InputMat);


    // calculating the exp(x)
    cv::Mat EXP_X;
    cv::exp(Floatmat, EXP_X);


    // calculating the exp(-x)
    cv::Mat EXP_X_;
    cv::exp(-Floatmat, EXP_X_);


    // calculating the tanh(x)
    cv::Mat Result = (EXP_X - EXP_X_) / (EXP_X + EXP_X_);


    return Result;
}





/**
* @brief Calculating the derivative of the tanh.
* @param InputMat  The input mat
* @return the result of the derivative of the tanh, whose size is the same of
*         the InputMat.
*
*
* @author sheng
* @version 0.1
* @date 2014-07-18
*
* @history
*     <author>       <date>         <version>        <description>
*      sheng       2014-07-18          0.1         build the function
*
*
*
*/
cv::Mat Tanh::Derivating(const cv::Mat &InputMat)
{
    // convert the inputmat to float mat
    cv::Mat FloatMat = ConvertToFloatMat(InputMat);

    // calculating the tanh(x)
    cv::Mat TanhX = Activating(FloatMat);

    // calculting the tanh(x) * tanh(x)
    cv::Mat SquareTanhX = TanhX.mul(TanhX);

    // calculating the derivative of the tanh
    cv::Mat Result = 1 - SquareTanhX;


    return Result;
}</span>


抱歉!评论已关闭.