在使用插入符号R包进行训练时,我一直在尝试实现mlpKerasDropout方法。
我的代码似乎连续在10个历元中循环10个,并且似乎没有收敛。我已经研究过mlpKerasDropout.R,但正在努力了解此功能的工作原理。
外面有没有一个最小的例子,他们可以分享如何使用此功能?
非常感谢,
答案 0 :(得分:0)
对于每个重新采样(由trainControl()驱动),它都运行拟合。这是您在连续10个纪元中的10个纪元中看到的。每个循环都是重新采样/折叠。您可以通过将epochs参数设置为train来更改超参数调整时使用的时期数,该参数将通过点参数(...)传递给训练方法“ mlpKerasDropout”
在此处查看mlpKerasDropout的代码:https://github.com/topepo/caret/blob/master/models/files/mlpKerasDropout.R
默认情况下,超参数的搜索参数设置为“网格”,但您可能希望将其设置为“随机”,以便它尝试除relu之外的其他激活函数,或提供自己的调整网格。
这是一个代码示例,该示例显示tuneLength与search ='random'的用法,并利用了早期停止以及传递给keras的历元参数。
tune_model <- train(x, y,
method = "mlpKerasDropout",
preProc = c('center', 'scale', 'spatialSign'),
trControl = trainControl(search = 'random', classProbs = T,
summaryFunction = mnLogLoss, allowParallel = TRUE),
metric = 'logLoss',
tuneLength = 20,
# keras arguments following
validation_split = 0.25,
callbacks = list(
keras::callback_early_stopping(monitor = "val_loss", mode = "auto",
patience = 20, restore_best_weights = TRUE)
),
epochs = 500)
请记住,在完成超参数调整CV之后,您要在训练数据上重新拟合模型。