我用java编写了一个sigmoid函数,它在处理单个数字时工作得很好,但是当给定一个数组在第一个数据输入后失败时。
这里有一些数据来说明我的问题(输出四舍五入到3位数)。

    Input | Correct Output | Output
        0 |       0.5      | 0.5
     -1,0 |    0.27,0.5    | 0.27,0.62
   1,0,-1 |  0.73,0.5,0.27 | 0.73,0.62,0.64

我的代码如下。
double[] data = { 1, 0, -1 };
System.out.println(sigmoid(data)[0] + "," + sigmoid(data)[1] + "," + sigmoid(data)[2]);


double[] sigmoid(double[] data) {
    for (int i = 0; i < data.length; i++)
        data[i] = 1 / (1 + Math.exp(-data[i]));
    return data;
}

如果这只是我一个愚蠢的明显疏忽,请告诉我,因为我已经尝试了几个小时都没有结果,并感谢任何回应。

最佳答案

虽然java是按值传递的,但传递给函数的值是对输入数组的引用,而不是数组的副本,因此函数就地修改数组,println中的每个调用都在更新上一个调用的结果。
复制数组以返回结果:

static double[] sigmoid(double[] data) {
    double[] z = Arrays.copyOf(data, data.length);
    for (int i = 0; i < z.length; i++)
        z[i] = 1 / (1 + Math.exp(-z[i]));
    return z;
}

关于java - Java Sigmoid方法返回不正确的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40837348/

10-12 12:35
查看更多