【发布时间】:2014-06-11 22:34:11
【问题描述】:
我正在用 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 循环中(第一个和第三个)它告诉我需要一个变量。我正在使用带有 Intellij 的 JDK 8。我使用以下内容创建权重列表:
ArrayList<Double> weights_ = new ArrayList<Double>();
每个列表都以类似的形式初始化。
【问题讨论】:
-
你看到 get 和 set 之间的区别了吗?
-
这是不允许的。首先获取值,然后在其中添加任何值。
-
我尝试使用: hiddenLayer_.get(j).weights_.get(l).doubleValue() += HiddenDelta * inputVector.get(l);它给了我同样的错误。