实验目的
- 理解BP神经网络和离散Hopfield神经网络的结构和原理
- 掌握反向传播学习算法对神经元的训练过程,了解反向传播公式
- 通过构建BP网络和离散Hopfield网络模式识别实例,熟悉前馈网络和反馈网络的原理及结构
- 通过编写源代码理解基于神经网络的模式识别
BP神经网络代码
#include <iostream>
#include <vector>
#include <map>
#include <string>
#include <string.h>
#include <queue>
#include <math.h>
#include <time.h>
#include <stdlib.h>
#include <algorithm>
using namespace std;
#define train_cycle 1000 //训练周期为1000
#define train_step 0.3 //训练步长
#define train_num 10 //训练数字数量
#define table_len 9 //表格长
#define table_wid 7 //表格宽
#define max_lim 0.9 //输出最大临界值
#define min_lim 0.1 //输出最小临界值
#define input_num 63 //输入层神经元数
#define hidden_num 30 //隐层神经元数
#define output_num 10 //输出层神经元数
struct input_neurons {
// double inp;
double outp;
double w[hidden_num];
}input_n[input_num];
struct hidden_neurons {
double inp;
double outp;
double w[output_num];
}hidden_n[hidden_num];
struct output_neurons {
double inp;
double outp;
}output_n[output_num];
//训练数据
bool trainData[train_num][table_len][table_wid] = {
0,0,0,0,0,0,0, //真实数字0
0,1,1,1,1,1,0,
0,1,0,0,0,1,0,
0,1,0,0,0,1,0,
0,1,0,0,0,1,0,
0,1,0,0,0,1,0,
0,1,0,0,0,1,0,
0,1,1,1,1,1,0,
0,0,0,0,0,0,0, //0
0,0,0,0,0,0,0, //1
0,0,0,1,0,0,0,
0,0,1,1,0,0,0,
0,0,0,1,0,0,0,
0,0,0,1,0,0,0,
0,0,0,1,0,0,0,
0,0,0,1,0,0,0,
0,1,1,1,1,1,0,
0,0,0,0,0,0,0, //1
0,0,0,0,0,0,0, //2
0,1,1,1,1,1,0,
0,0,0,0,0,1,0,
0,0,0,0,0,1,0,
0,1,1,1,1,1,0,
0,1,0,0,0,0,0,
0,1,0,0,0,0,0,
0,1,1,1,1,1,0,
0,0,0,0,0,0,0, //2
0,0,0,0,0,0,0, //3
0,1,1,1,1,1,0,
0,0,0,0,0,1,0,
0,0,0,0,0,1,0,
0,0,0,1,1,1,0,
0,0,0,0,0,1,0,
0,0,0,0,0,1,0,
0,1,1,1,1,1,0,
0,0,0,0,0,0,0, //3
0,0,0,0,0,0,0, //4
0,1,0,0,0,0,0,
0,1,0,0,0,0,0,
0,1,0,0,1,0,0,
0,1,1,1,1,1,0,
0,0,0,0,1,0,0,
0,0,0,0,1,0,0,
0,0,0,0,1,0,0,
0,0,0,0,0,0,0, //4
0,0,0,0,0,0,0, //5
0,1,1,1,1,1,0,
0,1,0,0,0,0,0,
0,1,0,0,0,0,0,
0,1,1,1,1,1,0,
0,0,0,0,0,1,0,
0,0,0,0,0,1,0,
0,1,1,1,1,1,0,
0,0,0,0,0,0,0, //5
0,0,0,0,0,0,0, //6
0,1,1,1,1,1,0,
0,1,0,0,0,0,0,
0,1,0,0,0,0,0,
0,1,1,1,1,1,0,
0,1,0,0,0,1,0,
0,1,0,0,0,1,0,
0,1,1,1,1,1,0,
0,0,0,0,0,0,0, //6
0,0,0,0,0,0,0, //7
0,1,1,1,1,1,0,
0,0,0,0,0,1,0,
0,0,0,0,1,0,0,
0,0,0,1,0,0,0,
0,0,1,0,0,0,0,
0,1,0,0,0,0,0,
0,1,0,0,0,0,0,
0,0,0,0,0,0,0, //7
0,0,0,0,0,0,0, //8
0,1,1,1,1,1,0,
0,1,0,0,0,1,0,
0,1,0,0,0,1,0,
0,1,1,1,1,