有没有办法在不使用像JAMA这样的外部库的情况下找到2D数组的sigmoid? 我尝试了以下代码,但失败了。
public static double[][] sigmoid(double[][] x, boolean deriv){
for (int i = 0; i <x.length ; i++)
{
for (int j = 0; j < x[1].length; j++){
if(deriv == false){
return sigmoid(x[i][j], false) * (1 - sigmoid(x[i][j], false));
}
return (1/(1 + Math.pow(Math.E, (-1 * x[i][j]))));
}
}
}
它说,不能将double转换为double [] []。任何解决这个问题的方法都将受到赞赏。谢谢!
答案 0 :(得分:1)
这是对数组x的元素方式sigmoid操作的函数:
public static double sigmoid(double t) {
return 1 / (1 + Math.pow(Math.E, (-1 * t)));
}
public static double[][] sigmoid(double[][] x, boolean deriv) {
double[][] = result = new double[x.length][x[0].length];
for (int i = 0; i < x.length; i++) {
for (int j = 0; j < x[i].length; j++) {
double sigmoidCell = sigmoid(x[i][j]);
if (deriv == true) {
result[i][j] = sigmoidCell * (1 - sigmoidCell);
} else {
result[i][j] = sigmoidCell;
}
}
}
return result;
}
在您的方法中,存在一些语法错误,以及一个永远不会结束的递归语句,因为deriv总是为false。此外,递归语句计算一个double,而不返回任何2d数组。
如果你做的不止这些,我建议你创建减法,点乘和创建矩阵的方法。