资源简介
BP神经网络JAVA实现源码(含两套训练测试数据)
并实现了训练结果的保存
以及对保存的训练结果的加载测试使用
代码片段和文件信息
package bpnn;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Random;
class BPNN implements Serializable {
/**
*
*/
private static final long serialVersionUID = -7717308986971656838L;
// private static int layer = 3; // 三层神经网络
private static int NodeNum = 10; // 每层的最多节点数
private static final int ADJUST = 5; // 隐层节点数调节常数
private static final int MaxTrain = 200000; // 最大训练次数
private static final double ACCU = 0.015; // 每次迭代允许的误差 iris:0.015
private double ETA_W = 0.5; // 权值学习效率0.5
private double ETA_T = 0.5; // 阈值学习效率
private double accu;
// 附加动量项
// private static final double ETA_A = 0.3; // 动量常数0.1
// private double[][] in_hd_last; // 上一次的权值调整量
// private double[][] hd_out_last;
private int in_num; // 输入层节点数
private int hd_num; // 隐层节点数
private int out_num; // 输入出节点数
private ArrayList> alllist = new ArrayList<>(); // 输入输出数据
private ArrayList outlist = new ArrayList(); // 存放分类的字符串
private double[][] in_hd_weight; // BP网络in-hidden突触权值
private double[][] hd_out_weight; // BP网络hidden_out突触权值
private double[] in_hd_th; // BP网络in-hidden阈值
private double[] hd_out_th; // BP网络hidden-out阈值
private double[][] out; // 每个神经元的值经S型函数转化后的输出值,输入层就为原值
private double[][] delta; // delta学习规则中的值
// 获得网络三层中神经元最多的数量
public int GetMaxNum() {
return Math.max(Math.max(in_num hd_num) out_num);
}
// 设置权值学习率
public void SetEtaW() {
ETA_W = 0.5;
}
// 设置阈值学习率
public void SetEtaT() {
ETA_T = 0.5;
}
// BPNN训练
public void Train(int in_number int out_number ArrayList> arraylist ArrayList outlist)
throws IOException {
this.alllist = arraylist;
this.outlist = outlist;
this.in_num = in_number;
this.out_num = out_number;
GetNums(in_num out_num); // 获取输入层、隐层、输出层的节点数
// SetEtaW(); // 设置学习率
// SetEtaT();
InitNetWork(); // 初始化网络的权值和阈值
int datanum = alllist.size(); // 训练数据的组数
int createsize = GetMaxNum(); // 比较创建存储每一层输出数据的数组
out = new double[3][createsize];
for (int iter = 0; iter < MaxTrain; iter++) {
for (int cnd = 0; cnd < datanum; cnd++) {
// 第一层输入节点赋值
for (int i = 0; i < in_num; i++) {
out[0][i] = alllist.get(cnd).get(i); // 为输入层节点赋值,其输入与输出相同
}
Forward(); // 前向传播
Backward(cnd); // 误差反向传播
}
System.out.println(“This is the “ + (iter + 1) + “ th trainning NetWork !“);
accu = GetAccu();
System.out.println(“All Samples Accuracy is “ + accu);
if (accu < ACCU)
break;
}
}
// 获取输入层、隐层、输出层的节点数,in_number、out_number分别为输入层节点数和输出层节点数
public void GetNums(int in_number int out_number) {
in_num = in_number;
out_num = out_number;
hd_num = (int) Math.sqrt(in_num + out_num) + ADJUST;
if (hd_num > NodeNum)
hd_num = NodeNum; // 隐层节点数不能大于最大节点数
}
// 初始化网络的权值和阈值
public void InitNetWork() {
// 初始化上一次权值量范围为-0.5-0.5之间
// in_hd_last = new double[in_num][hd_num];
// hd_out_last = new double[hd_num][out_num];
in_hd_weight = new
- 上一篇:超强vim配置文件
- 下一篇:java web新闻发表页面
相关资源
- java web新闻发表页面
- 一个小小的JAVA多线程程序
- java打猎射击游戏
- sun java程序员认证考试题库{2019最新版
-
SuperMap iob
jects Java SQL查询中的分组查 - Java项目经验,里面有六个项目经验
- java版成语消消乐
- myeclipse编写的学生信息管理系统,j
- jstl-impl-1.2.jar和jstl-api-1.2.jar
- Head-First-Java(中文第二版全部源代码
- Java POIExcel模板 Excel带有下拉框的模板
- java写的服务端,能够与客户端进行通
- java+ajax+mysql实现省市县三级联动
- Head First Java源代码 (中文第2版) (
- java项目简历
- JAVA课程设计(生日卡片)
- 金山打字通java打字模板
- 探花交友2020学习资料-Java大数据实战
- java实现人脸注册及人脸登录!
- Java socket的一个封装
- Java程序设计实践4 --网络聊天室(含实
- Java图形界面编程小游戏 --- 10 * 10 扫雷
-
Delphi MD5+ba
se64加密与JAVA .NET一样 - java开发实战1200例12卷全集含代码云盘
- Java聊天室(界面完整,群聊,私聊,
- tr069 java源码
- java调用海康sdk教程-linux/win.zip
- java SWT编写的截图程序
- java操作串口的jar包与dll/so文件,RXT
- Java 课程设计 程序代码
评论
共有 条评论