1 使用语言和库
库:mingw编译的OpenCV2.4.9.0
开发语言:C++
IDE:Qt Creator
版本控制:git
2 主要接口
2.1 功能
激活函数的主要功能是输入一个矩阵,计算矩阵中的元素的激活值,同时,也包含有输入一个矩阵,计算矩阵中的元素关于激活函数的导数值,这是为了后续进行神经网络实现所进行的一部分。
2.2 主要接口
2.2.1 激活计算接口
cv::Mat Activating(const cv::Mat& InputMat)
2.2.2 导数计算接口
cv::Mat Derivating(const cv::Mat& InputMat)
3 实现过程
3.1 接口实现
接口主要通过AbstractActivationFunction类来实现。
AbstractActivationFunction类的定义如下:
#ifndef ABSTRACTACTIVATIONFUNCTION_H #define ABSTRACTACTIVATIONFUNCTION_H #include "Headerfiles.h" /** * @brief The AbstractActivationFunction class is the abstract class used to * define the interface of the 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 AbstractActivationFunction { public: AbstractActivationFunction(); cv::Mat ConvertToFloatMat(const cv::Mat& InputMat); virtual cv::Mat Activating(const cv::Mat& InputMat) = 0; virtual cv::Mat Derivating(const cv::Mat& InputMat) = 0; virtual ~AbstractActivationFunction(); }; #endif // ABSTRACTACTIVATIONFUNCTION_H
函数的定义如下:
#include "abstractactivationfunction.h" /** * @brief The default constructor of the AbstractActivationFunction class. * * @author sheng * @version 0.1 * @date 2014-07-18 * * @history * <author> <date> <version> <description> * sheng 2014-07-18 0.1 build the function * * */ AbstractActivationFunction::AbstractActivationFunction() { } /** * @brief Convert the InputMat to be the float mat. * @param InputMat The input mat * @return The float mat which is at the same size of the InputMat. * @exception * * @TODO without throw exception. * * * @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 AbstractActivationFunction::ConvertToFloatMat(const cv::Mat &InputMat) { // assert if the InputMat is empty. // TODO: without throw exception assert(InputMat.data); if (!InputMat.data) { std::cout << "The input Mat is empty." << std::endl; return InputMat; } cv::Mat FloatInput; // convert the inputmat to float if (InputMat.depth() != CV_32F) { switch (InputMat.channels()) { case 1: InputMat.convertTo(FloatInput, CV_32FC1); break; case 2: InputMat.convertTo(FloatInput, CV_32FC2); break; case 3: InputMat.convertTo(FloatInput, CV_32FC3); break; case 4: InputMat.convertTo(FloatInput, CV_32FC4); break; default: break; } } else { FloatInput = InputMat; } return FloatInput; } /** * @brief The deconstructor of the AbstractActivationFunction class. * * @author sheng * @version 0.1 * @date 2014-07-18 * * @history * <author> <date> <version> <description> * sheng 2014-07-18 0.1 build the function * * */ AbstractActivationFunction::~AbstractActivationFunction() { }