我正在使用Java创建神经网络程序,我的相关类是Neuron
,Layer
和NeuralNetwork
。我有一个名为NeuralNetwork
的{{1}}实例。 network
具有一个称为network
的私有Layer
数组和一个名为layers
的私有Neuron
数组。 inputNeurons
(输入层)在网络的构造函数中初始化,并且layers[0]
中的Neuron
数组被分配给layers[0]
:
inputNeurons
这里是layers[0] = new Layer(inputLayerSize);
inputNeurons = layers[0].getNeurons();
构造函数:
Layer
如您所见,每个 public Neuron[] neurons;
Layer(int size)
{
neurons = new Neuron[size];
for(Neuron neuron : neurons)
{
neuron = new Neuron();
}
}
中的Neuron
已被初始化。但是,在neurons
方法之一的下面一行中,我得到了network
。
NullPointerException
这对我来说没有意义,因为每个inputNeurons[index].setValue(input[index]);
都对应一个初始化的inputNeurons[index]
,每个Neuron
都是一个input[index]
,不能为{{1} }。显然我的理解有问题,请赐教。谢谢。
编辑:我确认所有double
均为null
。
答案 0 :(得分:1)
这里的问题是,当您创建对象时,您并没有按照自己的想法进行循环。
for (Neuron neuron : neurons) {
neuron = new Neuron();
}
与
相同for (int i = 0; i < neurons.length; i++) {
Neuron neuron = neurons[i];
neuron = new Neuron(); // the array is NOT altered here
}
你想要什么
for (int i = 0; i < neurons.length; i++) {
neurons[i] = new Neuron(); // the array IS altered here
}