神经网络ml-ANN的改变【opencv2.4.10——>opencv3.4.4】

opencv2.4.10神经网络api的使用:

#include     

//创建:
CvANN_MLP bp; 
//下载
bp.load("test.xml")
//预测
bp.predict(in,out)

/*定义神经网络及参数*/
 CvANN_MLP bp; //bp网络
 CvANN_MLP_TrainParams params; //bp网络参数
 params.train_method = CvANN_MLP_TrainParams::BACKPROP;		//使用简单的BP算法,还可使用RPROP
params.bp_dw_scale = 0.1;
 params.bp_moment_scale = 0.1;
 //params.term_crit=cvTermCriteria(CV_TerMCrIT_ITER+CV_TERMCRIT_EPS,5000,0.01);

	/*设置网络层数,训练数据*/
        /*BACKPROP表示使用back-propagation的训练方法,使用BACKPROP有两个相关参数:bp_dw-scale,bp_moment_scale
          RPROP即最简单的propagation训练方法,使用PRPOP有四个相关参数:rp_dw0,rp-dw_plus,rp_dw_minus,rp_dw_min,rp_dw_max
         一个是权值更新率bp_dw_scale和权值更新冲量bp_moment_scale。
         这两个量一般情况设置为0.1就行了;太小了网络收敛速度会很慢,太大了可能会让网络越过最小值点
Mat layerSizes = (Mat_(1, 3) << IN_Dimension,HID_LAYERS,OUT_Dimension);//含有两个隐含层的网络结构,输入、输出层各3个节点
bp.create(layerSizes, CvANN_MLP::SIGMOID_SYM);//激活函数为SIGMOID函数,还可使用高斯函数(CvANN_MLP::GAUSSIAN),阶跃函数(CvANN_MLP::IDENTITY)

//训练
bp.train(trainingDataMat, labelsMat, Mat(), Mat(), params);//训练的接口train()

bp.save(bpxml);//存储模型

opencv3.4.4

 
        /*定义神经网络及参数*/
        Mat layerSizes = (Mat_(1, 3) << IN_Dimension,HID_LAYERS,OUT_Dimension);//含有两个隐含层的网络结构,输入、输出层各3个节点
        /*layerSizes设置了有两个隐含层的网络结构:输入层,两个隐含层,输出层。输入层和输出层节点数均为2,中间隐含层每层有两个节点
          create第二个参数可以设置每个神经节点的激活函数,默认为CvANN_MLP::SIGMOID_SYM
        */
        bp->setLayerSizes(layerSizes);//设置层数
        bp->setActivationFunction(ANN_MLP::SIGMOID_SYM, 0.1, 0.1);//激活函数
        bp->setTrainMethod(ANN_MLP::BACKPROP, 0.1, 0.1);//训练方法

        //激活函数为SIGMOID函数,还可使用高斯函数(CvANN_MLP::GAUSSIAN),阶跃函数(CvANN_MLP::IDENTITY)
        
        **//训练**
        Ptr trainData = TrainData::create(trainingDataMat, ROW_SAMPLE, labelsMat);//创建训练数据,ROW_SAMPLE表示data中每行为一个样本
        bp->train(trainData);//训练的接口train()

        bp->save(bpxml);//存储模型

        cout << "训练完成!"< bp = ANN_MLP::load("test.xml");//创建并加载保存的网络

你可能感兴趣的:(学习记录)