Java Sigmoid 方法 returns 不正确的结果
Java Sigmoid method returns Incorrect Results
我在 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
正在更新上次调用的结果。
将数组复制到 return 你的结果在:
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 中写了一个 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
正在更新上次调用的结果。
将数组复制到 return 你的结果在:
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;
}