【问题标题】:svm_train function of svmlib on android returns an errorandroid上svmlib的svm_train函数返回错误
【发布时间】:2014-08-01 23:38:39
【问题描述】:

我想使用 svmlib 进行分类,但是,当我使用 svm_train 时,android 返回并错误:“Caused by: java.lang.NullPointerException”。我不知道问题出在哪里,我认为我正确地构造了 svm_prolem“prob”和 svm_param“param”,如下所示。任何帮助将不胜感激,很抱歉通过发布这个长代码来打扰您。提前致谢

 // Readin the image training set
    ArrayList<Photo> photoList2 = new ArrayList<Photo>();
    ArrayList<ArrayList<Photo>> BAse = new ArrayList<ArrayList<Photo>>();
    int j=0;
    for(  j=0; j<EventAnnoation.length; j++){
photoList2 = new ArrayList<Photo>();
photoList2.addAll(myBaseLearning.getAllPhotoinCluster(EventAnnoation[j]));    //get photos from a specific cluster

BAse.add(photoList2);

}

 // Get the number of all images of training set
 int size = 0;
 for( j=0; j<BAse.size(); j++){
size+= BAse.get(j).size();}

 // build a problem

    svm_problem prob = new svm_problem();
    prob.l =size;
    prob.y = new double[prob.l];
    prob.x = new svm_node[prob.l][144];

    // Fill the problem 
 for(int i=0; i<BAse.size(); i++){
         photoList2 = new ArrayList<Photo>();
         photoList2.addAll(BAse.get(i));

        for(int t=0; t<photoList2.size(); t++){

            Photo p= photoList2.get(t);// get the image

            prob.y[i] = i;// La classe
            double[] data= getDataInDouble(p.getCEDD()); // convert data/feature from string to double

            int count =0;
            for ( j=0;j<data.length;j++) 
            {       
                prob.x[i][j] = new svm_node();
                prob.x[i][j].index =count;
                prob.x[i][j].value = data[j]; 
                count++;
            }// End data for each image
        }// fin de la lecture de toutes les images de la liste
 }// fin de la lecture de toutes les images de la base



    //********************************************************
    svm_parameter param = new svm_parameter();
   // default values
   param.svm_type = svm_parameter.C_SVC;
   param.kernel_type = svm_parameter.RBF;
   param.degree = 3;
   param.gamma = 0.5;   // 1/num_features
   param.coef0 = 0;
   param.nu = 0.5;
   param.cache_size = 100;
   param.C = 1;
   param.eps = 1e-3;
   param.p = 0.1;
    param.shrinking = 1;
   param.probability = 0;
   param.nr_weight = 0;
   param.weight_label = new int[5];
   param.weight = new double[5];
   param.weight[0] = 0;
   param.weight[1] = 0;
   param.weight[2] = 0;
   param.weight[3] = 0;
   param.weight[4] = 0;

   ph+=svm.svm_check_parameter(prob, param); 
   svm.svm_train(prob, param);

  text.setText(ph);

完整的消息错误是:

06-11 20:49:38.348: E/AndroidRuntime(5385): FATAL EXCEPTION: main
06-11 20:49:38.348: E/AndroidRuntime(5385): java.lang.RuntimeException: Unable to   start activity ComponentInfo{com.example.svmlibandr/com.example.svmlibandr.Svmliib}: java.lang.NullPointerException
06-11 20:49:38.348: E/AndroidRuntime(5385):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2071)
06-11 20:49:38.348: E/AndroidRuntime(5385):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2096)
06-11 20:49:38.348: E/AndroidRuntime(5385):     at android.app.ActivityThread.access$600(ActivityThread.java:138)
06-11 20:49:38.348: E/AndroidRuntime(5385):     at java.lang.reflect.Method.invoke(Method.java:511)
06-11 20:49:38.348: E/AndroidRuntime(5385):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
06-11 20:49:38.348: E/AndroidRuntime(5385):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
06-11 20:49:38.348: E/AndroidRuntime(5385):     at dalvik.system.NativeStart.main(Native Method)
06-11 20:49:38.348: E/AndroidRuntime(5385): Caused by: java.lang.NullPointerException
06-11 20:49:38.348: E/AndroidRuntime(5385):     at libsvm.Kernel.dot(svm.java:212)
06-11 20:49:38.348: E/AndroidRuntime(5385):     at libsvm.Kernel.<init>(svm.java:198)
06-11 20:49:38.348: E/AndroidRuntime(5385):     at libsvm.SVC_Q.<init>(svm.java:1155)
06-11 20:49:38.348: E/AndroidRuntime(5385):     at libsvm.svm.solve_c_svc(svm.java:1332)
06-11 20:49:38.348: E/AndroidRuntime(5385):     at  libsvm.svm.svm_train_one(svm.java:1509)
 06-11 20:49:38.348: E/AndroidRuntime(5385):    at libsvm.svm.svm_train(svm.java:2046)
 06-11 20:49:38.348: E/AndroidRuntime(5385):    at com.example.svmlibandr.Svmliib.onCreate(Svmliib.java:245)
 06-11 20:49:38.348: E/AndroidRuntime(5385):    at android.app.Activity.performCreate(Activity.java:5008)
 06-11 20:49:38.348: E/AndroidRuntime(5385):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
 06-11 20:49:38.348: E/AndroidRuntime(5385):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2035)

【问题讨论】:

  • 请提供完整的错误日志
  • 我编辑了原始消息,希望它更清楚。提前致谢

标签: android libsvm


【解决方案1】:

我发现错误是关于问题的维度。我让我的代码作为在 android 上为像我这样的大人物使用 svmlib 的示例。我希望它对其他人有用。

解决办法是:

int count=0;
    for(j=0; j<BAse.size(); j++){


         photoList2 = new ArrayList<Photo>();
         photoList2.addAll(BAse.get(j));

        for(int t=0; t<photoList2.size(); t++){
                Photo p= new Photo();
             p= photoList2.get(t);
             prob.y[count]= j;
             double[] data= new double[144];
              data= getDataInDouble(p.getCEDD());

             for(int i=0; i<data.length;i++){
                 prob.x[count][i]= new svm_node();
                 prob.x[count][i].index=i;
                 prob.x[count][i].value=data[i];
             }
                count++;
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-28
    • 2017-02-02
    • 2021-12-20
    • 1970-01-01
    • 2014-07-24
    • 2021-12-13
    • 2021-05-10
    • 1970-01-01
    相关资源
    最近更新 更多