指向最后一个

时间:2016-03-22 22:07:11

标签: java list object garbage-collection weak-references

我一直在寻找类似的问题,但我找不到答案(或者我没有输入正确的关键词)

我正在使用这个Java kohonen神经网络库:JKNNL

我正在从我的主类中实例化一个神经网络(DefaultNetwork Class)。该网络具有一系列权重的神经元(KohonenNeuron Class)。在网络的构造函数中,有一个for循环用于实例化具有随机权重的KohonenNeuron对象数组。问题是在循环结束时,所有神经元都具有相同的权重(与最后一个实例相同)。似乎所有KohonenNeuron都只引用了一个对象。我究竟做错了什么? 我尝试使用动态列表,并将instanciation分为声明和instanciation。似乎没什么用。

这是我从我的主要课程中打来的电话:

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"); 
    }
}

此时,在每次迭代时,它会打印一个具有不同重量的神经元。 但是,在调试中,我看到每次迭代,所有神经元都采用最后一个神经元的权重进行实例化。

这是我呼唤的KohonenNeuron构造函数:

 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.7982035619445,207.3469810016878,296.9038782440716,203.37270988484246,469.36732048088726,692.6075370855006,425.4782925339686,[]] 神经元编号2:[839.7982035619445,207.3469810016878,296.9038782440716,203.37270988484246,469.36732048088726,692.6075370855006,425.4782925339686,[]] 。 。 。 神经元数649:[839.7982035619445,207.3469810016878,296.6038782440716,203.37270988484246,469.36732048088726,692.6075370855006,425.4782925339686,[]]

如您所见,所有神经元都具有相同的权重。

我希望我能很好地解释这个问题。如果有人知道它为什么这样做以及如何解决它我会感激他们!

0 个答案:

没有答案