我通过运行以下代码获得NullPointerException:
主:
public class NeuralXOR {
public static void main(String[] args) {
double[] inputs = {1.0, 0.0};
NeuralNetwork network = new NeuralNetwork(2, 1, 3, 0.7, 0.9);
}
}
神经网络课程: 公共类NeuralNetwork {
Node[] inputNodes;
Node[] hiddenNodes;
Node[] outputNodes;
Layer[] layers;
int noOfInputNodes;
int noOfOutputNodes;
int noOfLayers = 3;
public NeuralNetwork(int noOfInputNodes, int noOfOutputNodes, int noOfHiddenNodes, double learningRate, double momentum) {
this.outputNodes = new Node[noOfOutputNodes];
for (int i = 0; i < outputNodes.length; i++) {
outputNodes[i] = new Node(i);
}
this.hiddenNodes = new Node[noOfHiddenNodes];
for (int i = 0; i < hiddenNodes.length; i++) {
hiddenNodes[i] = new Node(i);
}
this.inputNodes = new Node[noOfInputNodes];
for (int i = 0; i < hiddenNodes.length; i++) {
hiddenNodes[i] = new Node(i);
}
layers[0] = new Layer(inputNodes);
layers[1] = new Layer(hiddenNodes);
layers[2] = new Layer(outputNodes);
}
public void setInputs(double[] inputs) {
if (inputs.length == this.inputNodes.length) {
System.out.println(inputs.length);
for (int i = 0; i < inputs.length; i++) {
this.inputNodes[i].activation = inputs[i];
}
}
}
public double[] getOutputs() {
double[] outputs = new double[this.outputNodes.length];
for (Node outNode : this.outputNodes) {
outputs[outNode.nodeNumber] = outNode.activation;
}
return outputs;
}
}
class Node {
int nodeNumber;
double sum; // z
double activation; //Output
double deltaNode;
double gradient;
double[] outWeights;
public Node (int nodeNumber) {
this.nodeNumber = nodeNumber;
}
public void setOutWeights(int noOfOutNodes) {
this.outWeights = new double[noOfOutNodes];
for (int i = 0; i < outWeights.length; i++) {
this.outWeights[i] = Math.random();
}
}
public double sigmoid(double x) {
return 1 / (1 + Math.pow(Math.E, -x));
}
}
class Layer {
double layerBias;
Node[] nodes;
public Layer (Node[] nodes) {
this.nodes = nodes;
}
}
错误指向第&#34;层[0] =新层(inputNodes);&#34;在NeuralNetwork类中。没有红色显示也没有任何警告......
我认为由于缺乏有关JVM如何工作的知识而导致错误。 到目前为止,我已经尝试将这些课程分成不同文件中的公共课程,这些课程没有帮助(没有预料到)。我没有尝试过其他任何事情。 有什么想法吗? 提前谢谢!
答案 0 :(得分:1)
您需要初始化数组Layer layers = new Layer[3];
答案 1 :(得分:0)
Layer[] layers
对象未初始化,因此layers[0]
不存在