设为首页 加入收藏

TOP

BP神经网络 c++实现(二)
2017-06-14 10:22:50 】 浏览:367
Tags:神经网络 实现
{ double t = 0; for(int j = 0; j < ou_num; j++) t += w[2][i][j] * d[2][j]; d[1][i] = t * x[1][i] * (A - x[1][i]) / (A * B); } } //根据计算出的调整量对BP网络进行调整 void BP::UpdateNetWork() { //隐含层和输出层之间权值和阈值调整 for(int i = 0; i < hd_num; i++) { for(int j = 0; j < ou_num; j++) w[2][i][j] -= LR * d[2][j] * x[1][i]; } for(int i = 0; i < ou_num; i++) b[2][i] -= LR * d[2][i]; //输入层和隐含层之间权值和阈值调整 for(int i = 0; i < in_num; i++) for(int j = 0; j < hd_num; j++) w[1][i][j] -= LR * d[1][j] * x[0][i]; for(int i = 0; i < hd_num; i++) b[1][i] -= LR * d[1][i]; } //计算Sigmoid激活函数的值 double BP::Sigmoid(const double x) { return A / (1 + exp(-x / B)); } int main() { FILE *fpTrain = fopen("/Users/really/Desktop/student_train.csv", "r"); FILE *fpTest = fopen("/Users/really/Desktop/student_test.csv", "r"); vector data; double maxA = -1, minA = 1000, maxB = -1, minB = 1000; for(int i = 0; i < 200; i++) { double a, b, c; Data t; fscanf(fpTrain, "%lf,%lf,%lf", &a, &b, &c); t.x.push_back(a); t.x.push_back(b); t.y.push_back(c); maxA = max(maxA, a); minA = min(minA, a); maxB = max(maxB, b); minB = min(minB, b); data.push_back(t); } for(int i = 0; i < 200; i++) { data[i].x[0] = (data[i].x[0] - minA) / (maxA - minA); data[i].x[1] = (data[i].x[1] - minB) / (maxB - minB); } fclose(fpTrain); BP *bp = new BP(); bp->GetData(data); bp->Train(); for(int i = 0; i < 60; i++) { vector in; double a, b; fscanf(fpTest, "%lf,%lf", &a, &b); a = (a - minA) / (maxA - minA); b = (b - minB) / (maxB - minB); in.push_back(a); in.push_back(b); vector ou; ou = bp->ForeCast(in); if(ou[0] >= 0.5) ou[0] = 1; else ou[0] = 0; printf("%d\n", (int)ou[0]); } fclose(fpTest); return 0; }
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇BP神经网络 下一篇C++ vector容器

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目