Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java H2O:使用深度学习网格构建集成模型时的NullPointerException错误_Java_R_Deep Learning_H2o - Fatal编程技术网

Java H2O:使用深度学习网格构建集成模型时的NullPointerException错误

Java H2O:使用深度学习网格构建集成模型时的NullPointerException错误,java,r,deep-learning,h2o,Java,R,Deep Learning,H2o,我正在尝试使用R(版本3.3.3)和h2o中的深度学习(版本3.10.5.1)构建一个叠加集成模型来预测商户流失。响应变量是二进制的。目前,我正在尝试运行代码,使用grid search开发的前5个模型构建一个堆叠的集成模型。但是,当代码运行时,我得到了java.lang.NullPointerException错误,输出如下: java.lang.NullPointerException at hex.StackedEnsembleModel.checkAndInheritModelP

我正在尝试使用R(版本3.3.3)和h2o中的深度学习(版本3.10.5.1)构建一个叠加集成模型来预测商户流失。响应变量是二进制的。目前,我正在尝试运行代码,使用grid search开发的前5个模型构建一个堆叠的集成模型。但是,当代码运行时,我得到了java.lang.NullPointerException错误,输出如下:

java.lang.NullPointerException
    at hex.StackedEnsembleModel.checkAndInheritModelProperties(StackedEnsembleModel.java:265)
    at hex.ensemble.StackedEnsemble$StackedEnsembleDriver.computeImpl(StackedEnsemble.java:115)
    at hex.ModelBuilder$Driver.compute2(ModelBuilder.java:173)
    at water.H2O$H2OCountedCompleter.compute(H2O.java:1349)
    at jsr166y.CountedCompleter.exec(CountedCompleter.java:468)
    at jsr166y.ForkJoinTask.doExec(ForkJoinTask.java:263)
    at jsr166y.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:974)
    at jsr166y.ForkJoinPool.runWorker(ForkJoinPool.java:1477)
    at jsr166y.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:104)
下面是我用来进行超参数网格搜索和构建集成模型的代码:

hyper_params <- list(
                  activation=c("Rectifier","Tanh","Maxout","RectifierWithDropout","TanhWithDropout","MaxoutWithDropout"),
                  hidden=list(c(50,50),c(30,30,30),c(32,32,32,32,32),c(64,64,64,64,64),c(100,100,100,100,100)),
                  input_dropout_ratio=seq(0,0.2,0.05),
                  l1=seq(0,1e-4,1e-6),
                  l2=seq(0,1e-4,1e-6),
                  rho = c(0.9,0.95,0.99,0.999),
                  epsilon=c(1e-10,1e-09,1e-08,1e-07,1e-06,1e-05,1e-04)
                )

search_criteria <- list(
                      strategy = "RandomDiscrete",
                      max_runtime_secs = 3600,
                      max_models = 100,
                      seed=1234,
                      stopping_metric="misclassification",      
                      stopping_tolerance=0.01,                  
                      stopping_rounds=5
                    )

dl_ensemble_grid <- h2o.grid(
                          hyper_params = hyper_params,
                          search_criteria = search_criteria,
                          algorithm="deeplearning",
                          grid_id = "final_grid_ensemble_dl",
                          x=predictors,
                          y=response,
                          training_frame = h2o.rbind(train, valid, test),
                          nfolds=5,
                          fold_assignment="Modulo",
                          keep_cross_validation_predictions = TRUE,
                          keep_cross_validation_fold_assignment = TRUE,
                          epochs=12,
                          max_runtime_secs = 3600,
                          stopping_metric="misclassification",
                          stopping_tolerance=0.01,        
                          stopping_rounds=5,
                          seed = 1234,
                          max_w2=10
                        )           

DLsortedGridEnsemble_logloss <- h2o.getGrid("final_grid_ensemble_dl",sort_by="logloss",decreasing=FALSE)

ensemble <- h2o.stackedEnsemble(x = predictors, 
                            y = response, 
                            training_frame = h2o.rbind(train,valid,test), 
                            base_models = list(                                                   
                                                DLsortedGridEnsemble_logloss@model_ids[[1]],
                                                DLsortedGridEnsemble_logloss@model_ids[[2]],
                                                DLsortedGridEnsemble_logloss@model_ids[[3]],
                                                DLsortedGridEnsemble_logloss@model_ids[[4]],
                                                DLsortedGridEnsemble_logloss@model_ids[[5]],
                                              )

hyper\u params错误指的是检查基本模型中的
training\u frame
h2o.stackedAssemble()
中的
training\u frame
是否具有相同校验和的一行。我认为问题的产生是因为您动态创建了培训框架,而不是显式地定义它(尽管这应该可以工作,因为它最终是相同的数据)。因此,与其在网格和集成函数中设置
training\u frame=h2o.rbind(train,valid,test)
,不如在代码顶部设置以下内容:

df <- h2o.rbind(train, valid, test)

df还发现,在网格搜索过程中,当我将四个值(c(0,0.05,0.1,0.2)传递给“input_dropout_ratio”时,导致集成函数失败。但当我传递c(0,0.05)和c(0.1,0.2)时在两次单独的运行中,集成函数在两种情况下都起作用。@Erin您在这里的回答非常有用。我使用Pythron,向每个级别的学习者和集成传递了类似df_all[idx_train,:]的内容。我得到的错误完全相同。只需定义df_train=df_all[idx_train,:]前面,修好了。谢谢!!