BP神经网络是ANN人工神经中的一种,常用的神经网络有BP、RBF、SOM、Hopfield等,总体来说ANN主要功能是模式识别和分类训练。
http://www.zybang.com/question/9f85427ac0c4d7abb4709b024704e713.html
人工神经网络模型主要考虑网络连接的拓扑结构、神经元的特征、学习规则等.目前,已有近40种神经网络模型,其中有反传网络、感知器、自组织映射、Hopfield网络、波耳兹曼机、适应谐振理论等.
ann:人工神经网络(Artificial Neural Networks)
bp:Back Propagation网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一.BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程.它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小.BP神经网络模型拓扑结构包括输入层(input)、隐层(hide layer)和输出层(output layer).
void ANNTrain(Mat TrainData, Mat classes, int nNeruns)
{
ANN.clear();
Mat layers(1, 3, CV_32SC1);
layers.at<int>(0) = TrainData.cols;
layers.at<int>(1) = nNeruns;
layers.at<int>(2) = numCharacter;
ANN.create(layers, CvANN_MLP::SIGMOID_SYM, 1, 1);
//Prepare trainClases
//Create a mat with n trained data by m classes
Mat trainClasses;
trainClasses.create(TrainData.rows, numCharacter, CV_32FC1);
for (int i = 0; i < trainClasses.rows; i++)
{
for (int k = 0; k < trainClasses.cols; k++)
{
//If class of data i is same than a k class
if (k == classes.at<int>(i))
trainClasses.at<float>(i, k) = 1;
else
trainClasses.at<float>(i, k) = 0;
}
}
Mat weights(1, TrainData.rows, CV_32FC1, Scalar::all(1));
//Learn classifier
// ANN.train( TrainData, trainClasses, weights );
//Setup the BPNetwork
// Set up BPNetwork's parameters
CvANN_MLP_TrainParams params;
params.train_method = CvANN_MLP_TrainParams::BACKPROP;
params.bp_dw_scale = 0.1;
params.bp_moment_scale = 0.1;
// params.train_method=CvANN_MLP_TrainParams::RPROP;
// params.rp_dw0 = 0.1;
// params.rp_dw_plus = 1.2;
// params.rp_dw_minus = 0.5;
// params.rp_dw_min = FLT_EPSILON;
// params.rp_dw_max = 50.;
ANN.train(TrainData, trainClasses, Mat(), Mat(), params);
}