📄 neuron.java
字号:
package structure;
/**
* 一个神经元
* */
public class Neuron {
public double bias; //偏置值
public double output; //该神经元计算的输出值
public double dweight[]; //上一次权重调整的值
public double weight[]; //每个输入的权重
public Function func; //传输函数
public double err=0; //误差
/**
* 随机初始化神经元权重<p>
* @param num 是与该神经元相连的上一层的输出的数目
*(简单起见就是上一层的神经元数目)
* */
Neuron(int num,Function func){
weight =new double[num];
dweight =new double[num];
this.func=func;
init();
}
/**
* 由参数初始化神经元权重<p>
* @param layers 第几层的神经元
* @param n 该层的第几个神经元(不包括输入层)
* */
Neuron(int num,Function func,int layer,int n){
weight =new double[num];
this.func=func;
init(layer,n);
}
/**
* 对一个神经元初始化
* */
private void init(){
//double r;
RandomNum ran =RandomNum.getInstance();
Parameter para=Parameter.getInstance();
ran.setLimit(para.weightUp,para.weightDown);
for(int i=0;i<weight.length;i++){
weight[i]=ran.getDouble();
//System.out.println("w="+weight[i]);
}
bias=ran.getDouble();
}
private void init(int layer,int n){
Parameter para=Parameter.getInstance();
for(int i=0;i<weight.length;i++){
weight[i]=para.weights[layer][n][i];
System.out.println("w="+weight[i]);
}
bias=para.bias[layer][n];
}
/**
* 设置权重值
* */
void setWeight(double weight[]){
this.weight=weight;
}
/**
* 计算结果
* */
public double compute(double input[]){
double result=0;
for(int i=0;i<input.length;i++){
result+=input[i]*weight[i];
}
result+=bias;
output=func.getVal(result);
return output;
}
/**
* 神经元计算的输出值
* */
public double getOutput(){
return output;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -