使用H2O对深度学习模型进行网格搜索时出现报错
解决H2O网格搜索中"Cannot append new models to a grid with different training input"错误
这个错误的核心原因很明确:你指定的grid_id = "deep_learn"已经在当前运行的H2O实例中存在,并且这个已有的网格使用的训练数据和你现在传入的train.h2o不一致。H2O不允许向同一个网格ID中添加基于不同训练集训练的模型,所以抛出了这个异常。
这里有几个简单有效的解决方法:
方法1:删除已存在的同名网格
在运行新的网格搜索前,先检查并删除旧的网格:
# 检查网格是否存在 if (h2o.grid_exists("deep_learn")) { # 删除已存在的网格 h2o.rm("deep_learn") }
之后再重新运行你的网格搜索代码即可。
方法2:使用唯一的网格ID
每次运行网格搜索时,生成一个不会重复的grid_id,比如加上时间戳:
dl_grid <- h2o.grid("deeplearning" ,grid_id = paste0("deep_learn_", format(Sys.time(), "%Y%m%d_%H%M%S")) ,hyper_params = hyper_params ,search_criteria = search_criteria ,training_frame = train.h2o ,validation_frame = valid.h2o ,x=features ,y=response ,epochs = 100)
这样每次运行都会创建一个全新的网格,完全避免了ID冲突的问题,也方便你后续区分不同时间训练的网格。
方法3:重启H2O实例
如果上面的方法都不行,或者你想彻底清理H2O中的所有旧数据,可以重启H2O实例:
# 关闭当前H2O实例 h2o.shutdown(prompt = FALSE) # 重新初始化 h2o.init()
不过这个方法会清除H2O内存中的所有数据和模型,所以使用前要确认不需要保留这些内容。
另外需要注意:H2O的网格对象是和训练数据集绑定的,同一个网格只能添加基于完全相同的训练集训练的模型。如果你修改了训练数据(哪怕是微小的调整),都必须使用新的网格ID或者删除旧网格后再重新运行。
内容的提问来源于stack exchange,提问作者oercim
相关产品推荐
相关产品推荐

