问个 java 基础问题

2015-08-04 00:17:27 +08:00
 dalaomj
不懂java,现在要将一些代码转成其他语言。有些地方搞不明白。
public class LogisticRegression {
  public int N;
  public int n_in;
  public int n_out;
  public double[][] W;
  public double[] b;

  public LogisticRegression(int N, int n_in, int n_out) {
    //.......
  }
  
  public void train(int[] x, int[] y, double lr) {
    double[] p_y_given_x = new double[n_out];
    double[] dy = new double[n_out];
    for(int i=0; i<n_out; i++) {
      p_y_given_x[i] = 0;
      for(int j=0; j<n_in; j++) {
        p_y_given_x[i] += W[i][j] * x[j];
      }
      p_y_given_x[i] += b[i];
    }

    softmax(p_y_given_x); // ① ? ? ?

    for(int i=0; i<n_out; i++) {
      dy[i] = y[i] - p_y_given_x[i];
      
      for(int j=0; j<n_in; j++) {
        W[i][j] += lr * dy[i] * x[j] / N;
      }
      b[i] += lr * dy[i] / N;
    }
  }
  
  public void softmax(double[] x) { // ② ? ? ?
    double max = 0.0;
    double sum = 0.0;
    for(int i=0; i<n_out; i++) {
      if(max < x[i]) {
        max = x[i];
      }
    }
    for(int i=0; i<n_out; i++) {
      x[i] = Math.exp(x[i] - max);
      sum += x[i];
    }
    for(int i=0; i<n_out; i++) {
      x[i] /= sum;
    }
  }
}
上述 softmax 这个方法没有返回值,也没修改类的任何属性值。那这个方法的对外作用是什么?
在①处的调用,意思是什么?是以 p_y_given_x 这个变量为参数,然后执行结果也赋值给 p_y_given_x 了吗?
2582 次点击
所在节点    Java
5 条回复
liprais
2015-08-04 00:22:14 +08:00
p_y_given_x是个数组吧
执行前后打出来看看有没有变不就知道了
dotCom
2015-08-04 00:54:05 +08:00
①处的调用传入p_y_given_x所引用的数组(相当于指针),所以这个方法里的操作是直接施加在该数组上的。
SoloCompany
2015-08-04 00:57:59 +08:00
卧槽
不用 markdown 这空格是咋加上去的
黑魔法么









原来是全角空格。。。。
wkdhf233
2015-08-04 01:07:15 +08:00
leolusir
2015-08-04 17:00:24 +08:00
softmax方法修改了传入数组中元素的值,里面先求出最大值,再将每个值与最大值作差,结果作为自然数 e 的次方得出的值赋给本身,sum此时会变成新数组各元素之和,最后再将新数组每个元素除以sum得到的值再次赋给本身,又得到一个新的数组,可能讲的优点乱,注意到传入到这个方法的数组,内部各元素值会经过一系列运算被修改,得到一串新的元素

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/210580

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX