指向最后一个对象的java对象列表
我一直在寻找类似的问题,但找不到答案(或者我没有键入正确的关键字)
我正在使用这个Java kohonen神经网络库:JKNNL
我正在从我的主类实例化一个神经网络(DefaultNetwork类)。网络中有神经元(Kohoneneuron类)和一系列权值。在网络的构造器中,有一个for循环,用于实例化具有随机权重的Kohoneneuron对象数组。问题是在循环结束时,所有神经元都具有相同的权重(与最后一个实例化的对象相同)。所有的神经元似乎只引用一个对象。我做错了什么? 我尝试使用动态列表,并将实例分为声明和实例。似乎什么都不管用
以下是我在主课上的电话:
MatrixTopology topology = new MatrixTopology(65,10);
double[] maxWeight = //MAX WEIGHT INIT
DefaultNetwork network = new DefaultNetwork(33,maxWeight,topology);
System.out.println("====== NETWORK RANDOM CREATION - FROM MAIN ======== : \n" + network ); //THIS IS WHERE IT GETS WRONG
以下是我正在呼叫的DefaultNetwork构造函数:
public DefaultNetwork(int weightNumber, double[] maxWeight, TopologyModel topology) {
this.topology = topology;
int numberOfNeurons = topology.getNumbersOfNeurons(); //650 : Check !
neuronList = new KohonenNeuron[numberOfNeurons]; //List of 650 : Check !
for (int i=0; i<numberOfNeurons; i++){
neuronList[i] = new KohonenNeuron(weightNumber,maxWeight,null) ;
System.out.println("FROM DEFAULT NETWORK CLASS (random init!!) \n");
System.out.println("neuron " + i +": " + neuronList[i] + " \n");
}
}
在这一点上,在每次迭代中,它都会打印出一个具有不同权重的神经元。。 但是,在调试中,我看到每次迭代,所有神经元都会取最后一个实例化神经元的权重
这是我打电话给的Kohoneneuron承包商:
public KohonenNeuron(int weightNumber, double[] maxWeight, ActivationFunctionModel activationFunction){
if(weightNumber == maxWeight.length){
Random rand = new Random();
weight = new double[weightNumber];
for(int i=0; i< weightNumber; i++){
weight[i] = rand.nextDouble() * maxWeight[i];
}
}
this.activationFunction = activationFunction;
}
当我运行代码时:
=======网络随机创建-从主节点==============: 1号神经元:[839.7982035619445207.3469810016878,296.903872440716,203.372709884246469.36732048088726,692.607537085506,425.4782925339686,[…] 2号神经元:[839.7982035619445,207.3469810016878,296.903872440716,203.372709884246469.36732048088726,692.607537085506,425.4782925339686,[…] . . . 神经元编号649:[839.7982035619445,207.3469810016878,296.903872440716,203.372709884246469.36732048088726,692.607537085506,425.4782925339686,[…]
正如你所见,所有的神经元都有相同的权重
我希望我能很好地解释这个问题。如果有人知道为什么要这样做,以及我如何修复它,我将非常感谢他们
共 (0) 个答案