我正在用Java编写神经网络,而且我在使用ArrayList.get()时没有返回变量。
double train(ArrayList<Double> inputVector, double desiredOutput) {
double result = output(inputVector);
double error = desiredOutput - result;
double delta = learningRate_ * error * result * (1.0 - result);
for (int i = 0; i < outputLayer_.weights_.size(); i++) {
outputLayer_.weights_.get(i).doubleValue() += delta * lastOutput_.get(i);
}
ArrayList<Double> hiddenDelta = new ArrayList<Double>();
for (int j = 0; j < hiddenLayer_.size(); j++) {
double HiddenDelta = delta * outputLayer_.weights_.get(j + 1) * lastOutput_.get(j + 1) * (1 - lastOutput_.get(j + 1));
for (int l = 0; l < hiddenLayer_.get(j).weights_.size(); l++) {
hiddenLayer_.get(j).weights_.get(l) += HiddenDelta * inputVector.get(l);
}
}
我得到的错误是在两个尝试+ =的行中,每个都在for循环中(第一个和第三个)它告诉我一个变量是预期的。我正在使用JDK 8和Intellij。我使用以下内容创建权重列表:
ArrayList<Double> weights_ = new ArrayList<Double>();
每个列表都以类似的形式初始化。
答案 0 :(得分:5)
表达式outputLayer_.weights_.get(i).doubleValue()
是readOnly。您无法为其指定值。
首先将其值放在变量中:
double newWeight = outputLayer_.weights_.get(i).doubleValue() + delta * lastOutput_.get(i);
然后分配新的计算值:
outputLayer_.weights_.set(i, newWeight);