环境:
主机:WIN7
开发环境:Qt
实现功能:
建立了细胞类以及BP网络类.BP神经网络为3层结构:输入层,隐藏层,输出层.
说明:
1.细胞模型
2.BP网络模型
3.输入层细胞阈值为0,输出层细胞权值为1.
4.隐藏层传递函数为f(x) = 1 / (1 + e(-x))
5.需要载入的权文件名为w.txt,放在运行目录下,格式为每个数字一行.输入顺序为输入层细胞所有权,隐藏层细胞所有权.
6.需要载入的权阈值文件名为threshold.txt,放在运行目录下,格式为每个数字一行.输入顺序为隐藏层细胞所有阈值,输出层细胞所有阈值.
7.供BP网络学习的文件名为study.txt,放在运行目录下,格式为每个数字一行.输入顺序为第1次所有输入层细胞的输入,第1次所有输出层细胞的输出,第2次...
8.权值和阈值可以用提供的随机函数生成,范围是-1至1
源代码:
public.h:细胞及BP网络类头文件
- #ifndef PUBLIC_H
- #define PUBLIC_H
-
-
- #include <QWidget>
- #include "qdebug.h"
- #include "QFile"
-
- #include "math.h"
- #include <time.h>
-
-
-
-
-
-
-
- class _Cell
- {
- private:
-
- int num_in;
-
- int num_out;
-
- double *pt_in;
-
- double *pt_out;
-
- double out_no_w;
-
- double *pt_w;
-
- double threshold;
-
- int type_fun;
-
- double fun(double x);
- public:
-
-
-
- _Cell(int num1 = 0,int num2 = 0);
-
- void set_in_num(int num);
-
- void set_out_num(int num);
-
- int return_in_num();
-
- int return_out_num();
-
-
- double return_w(int num);
-
- double return_threshold();
-
-
- double return_in(int num);
-
- void set_in(double a,int num);
-
- void set_threshold(double a);
-
- void set_w(double a,int num);
-
- void set_fun(int num);
-
- void calc();
-
- double output(int num);
-
- double output_no_w();
- };
-
-
- class _BP_Net
- {
- private:
-
- int num_in_layer;
-
- int num_hide_layer;
-
- int num_out_layer;
-
- _Cell *pt_in_layer_cell;
-
- _Cell *pt_hide_layer_cell;
-
- _Cell *pt_out_layer_cell;
-
- double g;
- public:
-
- _BP_Net(int num_in = 0,int num_hide = 0,int num_out = 0);
-
- void set_num_in_layer(int num);
-
- void set_num_hide_layer(int num);
-
- void set_num_out_layer(int num);
-
- int return_num_in_layer();
-
- int return_num_hide_layer();
-
- int return_num_out_layer();
-
-
-
-
-
- double return_w(int i,int j,int k);
-
-
-
-
- double return_threshold(int i,int j);
-
- void set_rand_w();
-
- void set_rand_threshold();
-
-
- void set_in_layer_w(double a,int i,int j);
-
-
- void set_hide_layer_w(double a,int i,int j);
-
-
- void set_hide_layer_threshold(double a,int num);
-
-
- void set_out_layer_threshold(double a,int num);
-
- void set_g(double a);
-
-
- void study(double *right);
-
- void calc();
-
- double output(int num);
-
- void set_in(double a,int num);
- };
-
-
-
-
-
-
-
- double mapminmax(double dst,double min,double max);
-
-
-
-
- double premapminmax(double dst,double min,double max);
-
-
-
- int load_w(QString dir,_BP_Net *bp_net);
-
-
-
- int load_threshold(QString dir,_BP_Net *bp_net);
-
-
-
- int write_w(QString dir,_BP_Net *bp_net);
-
-
-
- int write_threshold(QString dir,_BP_Net *bp_net);
-
-
-
- int study(QString dir,_BP_Net *bp_net);
-
- #endif // PUBLIC_H