神经网络 JAVA工具包 joone 例程
初接触joone,根据网上找到的使用教程及官方API所写的使用例程:
- 新建BPNN类:
//package myBPNN;
import java.io.*;
import org.joone.engine.*;
import org.joone.engine.learning.TeachingSynapse;
import org.joone.io.*;
import org.joone.net.*;
/**BPNN类,实现了神经网络初始化,训练,测试等方法
* 输入为0~1之间的double数(组)
* 输出为0~1之间的double数(组)
* 使用的接口方法可自定义执行内容
* */
public class BPNN implements NeuralNetListener,Serializable {
//序列号用于检查兼容性
private static final long serialVersionUID = -3472219226214066504L;
//神经网络成员
private NeuralNet nnet = null;
//神经网络保存路径
private String NNet_Path = null;
/**初始化神经网络
* String NNet_Path 神经网络存放路径
* int InputNum 输入层神经元个数
* int HiddenNum 隐藏层神经元个数
* int OutputNum 输出层神经元个数
* */
public void Init_BPNN(String NNet_Path,int InputNum,int HiddenNum,int OutputNum) {
//设置新网络的保存路径
this.NNet_Path = NNet_Path;
//新建三个Layer,分别作为输入层,隐藏层,输出层
LinearLayer input = new LinearLayer();
SigmoidLayer hidden = new SigmoidLayer();
SigmoidLayer output = new SigmoidLayer();
//设置每个Layer包含的神经元个数
input.setRows(InputNum);
hidden.setRows(HiddenNum);
output.setRows(OutputNum);
//新建两条突触,用于连接各层
FullSynapse synapse_IH = new FullSynapse();
FullSynapse synapse_HO = new FullSynapse();
//连接输入-隐藏,隐藏-输出各层
input.addOutputSynapse(synapse_IH);
hidden.addInputSynapse(synapse_IH);
hidden.addOutputSynapse(synapse_HO);
output.addInputSynapse(synapse_HO);
//新建一个神经网络,并添加输入层,隐藏层,输出层
nnet = new NeuralNet();
nnet.addLayer(input, NeuralNet.INPUT_LAYER);
nnet.addLayer(hidden, NeuralNet.HIDDEN_LAYER);
nnet.addLayer(output, NeuralNet.OUTPUT_LAYER);
}
/**使用磁盘文件训练新建的神经网络,需与Init_BPNN搭配使用
* String TrainFile 训练文件存放路径
* int TrainLength 训练文件的行数
* double Rate 神经网络训练速度
* double Momentum 神经网络训练动量
* int TrainCicles 神经网络训练次数
* */
public void Train_BPNN(String TrainFile,int TrainLength,double Rate,double Momentum,int TrainCicles){
//获取输入层
Layer input = nnet.getInputLayer();
//新建输入突触
FileInputSynapse trains = new FileInputSynapse();
//设置输入文件
trains.setInputFile(new File(TrainFile));
//设置使用的列数,文件第1,2,3,4列作为训练的输入
trains.setAdvancedColumnSelector("1,2,3,4");
//获取输出层
Layer output = nnet.getOutputLayer();
//新建输入突触
FileInputSynapse target = new FileInputSynapse();
//设置输入文件
target.setInputFile(new File(TrainFile));
//设置使用的列数,文件第5,6列作为训练的目标
target.setAdvancedColumnSelector("5,6");
//新建训练突触
TeachingSynapse trainer