V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dalaomj
V2EX  ›  Java

问个 java 基础问题

  •  
  •   dalaomj · 2015-08-04 00:17:27 +08:00 · 2568 次点击
    这是一个创建于 3182 天前的主题,其中的信息可能已经有所发展或是发生改变。
    不懂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 了吗?
    5 条回复    2015-08-04 17:00:24 +08:00
    liprais
        1
    liprais  
       2015-08-04 00:22:14 +08:00
    p_y_given_x是个数组吧
    执行前后打出来看看有没有变不就知道了
    dotCom
        2
    dotCom  
       2015-08-04 00:54:05 +08:00   ❤️ 1
    ①处的调用传入p_y_given_x所引用的数组(相当于指针),所以这个方法里的操作是直接施加在该数组上的。
    SoloCompany
        3
    SoloCompany  
       2015-08-04 00:57:59 +08:00   ❤️ 1
    卧槽
    不用 markdown 这空格是咋加上去的
    黑魔法么









    原来是全角空格。。。。
    wkdhf233
        4
    wkdhf233  
       2015-08-04 01:07:15 +08:00   ❤️ 1
    leolusir
        5
    leolusir  
       2015-08-04 17:00:24 +08:00   ❤️ 1
    softmax方法修改了传入数组中元素的值,里面先求出最大值,再将每个值与最大值作差,结果作为自然数 e 的次方得出的值赋给本身,sum此时会变成新数组各元素之和,最后再将新数组每个元素除以sum得到的值再次赋给本身,又得到一个新的数组,可能讲的优点乱,注意到传入到这个方法的数组,内部各元素值会经过一系列运算被修改,得到一串新的元素
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2858 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 02:37 · PVG 10:37 · LAX 19:37 · JFK 22:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.