实验目的
- 理解BP神经网络和离散Hopfield神经网络的结构和原理
- 掌握反向传播学习算法对神经元的训练过程,了解反向传播公式
- 通过构建BP网络和离散Hopfield网络模式识别实例,熟悉前馈网络和反馈网络的原理及结构
- 通过编写源代码理解基于神经网络的模式识别
BP神经网络代码
#include
#include
#include
hopfield神经网络代码
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define maxl 100
#define maxn 100
int n, l, w[maxl][maxl], a[maxn][maxl], multi_result[maxl];
int get_w(int x, int y) {
int w = 0;
for (int i = 1; i <= n; i++) {
int t1, t2;
t1 = a[i][x] == 0 ? -1 : a[i][x];
t2 = a[i][y] == 0 ? -1 : a[i][y];
w += t1 * t2;
}
return w;
}
void matrix_multi(int t[maxl]) {
memset(multi_result, 0, sizeof(multi_result));
for (int i = 1; i <= l; i++) {
for (int j = 1; j <= l; j++) {
multi_result[i] += t[j] * w[i][j];
}
multi_result[i] >= 0 ? multi_result[i] = 1 : multi_result[i] = 0;
}
for (int i = 1; i <= l; i++) {
cout << multi_result[i] << " ";
}
cout << endl;
}
int main() {
memset(a, 0, sizeof(a));
memset(w, 0, sizeof(w));
cout << "请输入要输入数据组数及每组数据的长度:" << endl;
cin >> n >> l;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= l; j++) {
cin >> a[i][j];
}
}
for (int i = 1; i < l; i++) {
for (int j = i + 1; j <= l; j++) {
w[i][j] = get_w(i, j);
}
}
for (int i = 2; i <= l; i++) {
for (int j = 1; j < i; j++) {
w[i][j] = w[j][i];
}
}
cout << "连接权值为:" << endl;
for (int i = 1; i <= l; i++) {
for (int j = 1; j <= l; j++) {
cout << w[i][j]<<" ";
}
cout << endl;
}
cout << "请输入测试数据:" << endl;
int flag = 1;
while (flag) {
int t[maxl];
memset(t, 0, sizeof(t));
for (int i = 1; i <= l; i++) {
cin >> t[i];
}
cout << "开始迭代:" << endl;
matrix_multi(t);
while (memcmp(t, multi_result, l + 1)) {
memcpy(t, multi_result, l * sizeof(int));
matrix_multi(multi_result);
}
cout << "达到稳定,稳定状态为:" << endl;
for (int i = 1; i <= l; i++) {
cout << multi_result[i] << " ";
}
cout << endl;
cout << "结束输入请输入0,继续输入则输入其他数字:";
cin >> flag;
}
}
学习心得
了解了BP神经网络和离散Hopfield神经网络的结构和原理,了解了反向传播学习算法对神经元的训练过程,了解了反向传播公式。通过构建了BP网络和离散Hopfield网络模式识别的实例,知道了前馈网络和反馈网络的原理及结构,知道了模式识别的原理,知道了识别过程的程序设计方法。