【问题标题】:ArrayList.get(index) not returning a variable?ArrayList.get(index) 不返回变量?
【发布时间】: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>();

每个列表都以类似的形式初始化。

【问题讨论】:

  • 你看到 getset 之间的区别了吗?
  • 这是不允许的。首先获取值,然后在其中添加任何值。
  • 我尝试使用: hiddenLayer_.get(j).weights_.get(l).doubleValue() += HiddenDelta * inputVector.get(l);它给了我同样的错误。

标签: java arraylist java-8


【解决方案1】:

表达式outputLayer_.weights_.get(i).doubleValue() 是只读的。你不能给它赋值。

首先将其值放入一个变量中:

double newWeight = outputLayer_.weights_.get(i).doubleValue() + delta * lastOutput_.get(i);

然后分配新的计算值:

outputLayer_.weights_.set(i, newWeight);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-21
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多